Bash

在命令行從 tail 執行文本的最簡單方法是什麼?

  • April 6, 2012

有時我正在開發一個新的(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,所以我可以找到一些其他選擇:

  1. 從 12.04 安裝包 - 這不應該是問題 - 它只是 Python 中的幾個腳本,所以它應該可以工作(未經測試!)。

  2. 更改stderrstdout。為此,請編輯文件/usr/lib/python2.7/dist-packages/CommandNotFound/CommandNotFound.py並更改stderrstdout第 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包將被安裝。

引用自:https://unix.stackexchange.com/questions/35732