在命令行從 tail 執行文本的最簡單方法是什麼?
有時我正在開發一個新的(ubuntu)盒子,我輸入
git
並收到警報:The program 'git' is currently not installed. You can install it by typing: apt-get install git-core
如果發生這種情況,我知道我可以通過執行以下操作來抓住最後一行:
!! 2>&1 | tail -n 1
apt-get install git-core
但是我怎樣才能最容易地執行那個 ( ) 的結果呢?我意識到我能做到
`!! 2>&1 | tail -n 1`
但是還有一種方法可以實際管道輸出並執行它嗎?這似乎不起作用:
!! 2>&1 | tail -n 1 | sh
這
2>&1
部分也有點麻煩,所以我很好奇是否有更簡單的方法來實現這一點。編輯
以某種方式將其保存到變數中也是可以接受的,然後執行該變數:
!! 2>&1 | tail -n 1 | (store as $mycmd) $mycmd
但我也不確定我是否知道一種通過管道
stdout
輸入變數的方法,至少不知道變數位於命令的右側。
當您鍵入系統中不存在的命令時,bash 執行函式
command_not_found_handle()
。在這個函式中有一個/usr/lib/command-not-found
列印消息的腳本呼叫。Ubuntu 12.04
我的第一個猜測是更改此腳本的源以列印消息,
stdout
但是stderr
當我閱讀腳本的源時,我發現您可以將其配置為僅詢問您是否要安裝缺少的軟體包。如果您導出變數
COMMAND_NOT_FOUND_INSTALL_PROMPT
,您將被要求安裝缺少的包:pbm@ubuntu:~$ git The program 'git' is currently not installed. You can install it by typing: sudo apt-get install git pbm@ubuntu:~$ export COMMAND_NOT_FOUND_INSTALL_PROMPT="" pbm@ubuntu:~$ git The program 'git' is currently not installed. You can install it by typing: sudo apt-get install git Do you want to install it? (N/y)y sudo apt-get install git [sudo] password for pbm:
舊版本的 Ubuntu
不幸的是沒有
COMMAND_NOT_FOUND_INSTALL_PROMPT
,所以我可以找到一些其他選擇:
從 12.04 安裝包 - 這不應該是問題 - 它只是 Python 中的幾個腳本,所以它應該可以工作(未經測試!)。
更改
stderr
為stdout
。為此,請編輯文件/usr/lib/python2.7/dist-packages/CommandNotFound/CommandNotFound.py
並更改stderr
為stdout
第 237 和 240 行。之後,您可以通過以下方式使用它:
pbm@ubuntu:~$ git The program 'git' is currently not installed. You can install it by typing: sudo apt-get install git pbm@ubuntu:~$ `git` //Installation begins
如果您在第 237 和 240 行添加
-y
選項到apt-get
命令,您也可以使用語法!! | sh
。3)您也可以通過這種方式從第 242 行修改此腳本:
print >> sys.stderr, _("You can install it by typing:") f = open("%s/.install-missing" % os.path.expanduser('~'),'w') print >> sys.stderr, "sudo apt-get install %s" % packages[0][0] print >> f, "sudo apt-get install %s" % packages[0][0] f.close()
通過這種方式,您將在 file 中獲取命令
~/.install-missing
,因此您可以創建別名:alias im="chmod +x ~/.install-missing; ~/.install-missing"
如果你呼叫
im
包將被安裝。