題:
複製終端中的最後一個命令
Maxim Yefremov
2013-11-13 00:36:15 UTC
view on stackexchange narkive permalink

通過按向上箭頭可以看到終端中的最後一個命令,如下例所示:

我鍵入了 cd /

  Makss-Mac:〜maks $ cd /  

...按下 enter ,執行命令 cd / ,然後現在我可以按向上箭頭並再次看到命令 cd /

  Makss-Mac:/ maks $ cd /  

我不僅要查看上一個命令,還要將其複製到剪貼板。

也許存在快捷方式,它不僅可以在終端中顯示最後一個命令(如向上箭頭一樣),而且還可以將其複製到剪貼板。

或者也許有捷徑可以從當前終端線路中選擇所有終端。這樣,我就可以通過按 super + c 複製上一個命令(按上箭頭後)。我當然可以用鼠標選擇它。但是,當命令的長度是 cd / 的10倍時,可能會非常耗時,特別是如果每30秒執行一次。

或者也許有辦法編寫插件用於終端

如果以後可以添加一些有關您打算對剪貼板內容執行的操作的詳細信息,那麼在此處找到解決方案可能會更容易。您要粘貼到哪裡?
是的,將其粘貼到另一個終端選項卡
五 答案:
Asmus
2013-11-13 01:17:31 UTC
view on stackexchange narkive permalink

將其放入您的〜/ .bashrc 〜/ .bash_profile 或您喜歡的任何位置:

  alias copyLastCmd = 'fc -ln -1 | awk'{$ 1 = $ 1} 1'| pbcopy' 

打開新窗口(或運行 source〜/ .bash_profile )後,您應該可以運行 copyLastCmd 並具有剪貼板中的命令。

要解釋發生了什麼:您基本上是在使用“修復命令”( fc )來獲取最後一條命令,請刪除前導和尾隨空格,以便使用 awk 進行更好的格式化,然後使用 pbcopy 將其複製到Mac的粘貼板中。

編輯:

現在我們知道您要復制並粘貼到另一個終端選項卡中,還有另一個選項:將這些行添加到您的〜/ .bashrc 〜/ .bash_profile 或任何您喜歡的地方:

  shopt -s histappendPROMPT_COMMAND ='$ PROMPT_COMMAND;歷史-a;歷史記錄-n' 

然後,一旦打開一些新選項卡(我們稱它們為“選項卡A”和“選項卡B”):

  1. 執行選項卡A中的任何命令
  2. 切換到選項卡B,在行上按Enter,為您提供“新鮮”新行(從而重新評估歷史記錄)
  3. 使用向上箭頭一次,您應該在標籤A中輸入剛剛輸入的命令。
  4. ol>

    編輯2:我已替換了上面原始答案中 sed awk 的用法,可以同時照顧到前導和尾隨空格。

真是個好別名!為了切斷結尾的新行,以便您可以在粘貼後編輯命令,我使用了`awk`:`alias copyLastCmd ='fc -ln -1 | sed'1s / ^ [[:: space:]] * //'| awk 1 ORS =“” | pbcopy'`
沒錯,@nwinkler:,應該使用awk:`fc -ln -1 | awk'{$ 1 = $ 1} 1'`將同時刪除尾隨和前導空格。
必須為特殊字符'alias copyLastCmd =“ fc -ln -1 | awk'{\ $ 1 = \ $ 1} 1'| pbcopy”修改別名。仍然得到我的認可
我一直使用它,直到我在一個終端上執行了“ git -reset --hard”操作,然後在另一個“毫無懷疑的git文件夾”中按了向上箭頭並倉促地輸入,因為我認為自己正在運行以前使用的腳本。您可以想像發生了什麼,那是我最後一次使用這種共享的“全球”歷史
@MrGigu發生在我身上,具有“本地”歷史記錄,我無意間兩次按了向上箭頭,而不是一次。
Sam Berry
2018-12-07 20:45:16 UTC
view on stackexchange narkive permalink

這將使用歷史擴展來獲取最後一條命令並回顯它。您可以通過管道傳輸到 pbcopy ,以將最後一個命令保存到剪貼板。

  >迴聲!|pbcopy
 

如果您希望歷史記錄中的命令不是最後一個命令,則可以運行:

  >歷史記錄
 

並參考所需的命令編號,例如:

  >迴聲!5 |pbcopy
 
它可能是您的最愛,甚至可能起作用,但是您需要對命令的實際作用以及OP(五年前接受了答案之一的人)如何有效使用它進行一些說明。
@IconDaemon好電話。我認為這值得添加到一個舊問題中,因為它比接受的答案更簡單,因為它不需要任何配置文件自定義。
nwinkler
2013-11-14 17:05:24 UTC
view on stackexchange narkive permalink

這是基於@Asmus的答案的另一種觀點。為了使他的別名在我的bash腳本中起作用,我不得不使用一些引號,因為在沒有其他引號的情況下,單引號不能在單引號的別名中起作用。

  alias copyLastCmd = 'fc -ln -1 | awk'\'{$ 1 = $ 1} 1'\''| pbcopy' 

'\''基本將關閉當前報價,然後添加一個轉義的報價,然後再次打開實際的報價。

上述版本會將最後一個命令複製到剪貼板,一旦粘貼,它將立即執行,因為它的末尾會有 newline

要刪除換行符後,因此實際上可以在運行命令之前對其進行編輯,您可以執行以下操作:

  alias copyLastCmd ='fc -ln -1 | awk'\'{$ 1 = $ 1} 1'\''ORS ='\'''\''| pbcopy' 

ORS =''(不帶引號)將去除尾隨的換行符,因此您可以在運行之前編輯粘貼的文本。

Chris Gillatt
2019-08-19 15:36:06 UTC
view on stackexchange narkive permalink

我來到這裡的時候想出了Sam Berry的完全相同的答案,但這對我不起作用(OSX 10.14.6)。

設法做到這一點,用 !! 周圍的引號引起來:

echo“ !!”|pbcopy

kidbrax
2013-11-13 01:19:55 UTC
view on stackexchange narkive permalink

您可以將歷史記錄設置為忽略以空格開頭的命令:

  export HISTIGNORE ='*' 

,然後運行以下命令將最後一個命令混入剪貼板(確保開頭有空格):

  history 1 |切-d“” -f 4- | pbcopy  

然後您可能希望將命令另存為別名,以便於記憶。



該問答將自動從英語翻譯而來。原始內容可在stackexchange上找到,我們感謝它分發的cc by-sa 3.0許可。
Loading...