Bash
如何在沒有 bash 的命令替換的情況下執行輸出字元串?
如何在沒有 bash 的命令替換的情況下執行輸出字元串?
例如,如果我輸入終端
tshark
,但程序尚未安裝,我將收到如下錯誤消息:_some text_ sudo apt-get install tshark
現在我想在沒有複製粘貼或轉錄的情況下執行最後一行。
如果我嘗試
$ tshark 2> >(tail -1) sudo apt-get install tshark
我將得到我想要執行的最後一行。
如果我想執行這個字元串,當然 bash 的命令替換可以正常工作並正確安裝所有內容:
$ $(tshark 2> >(tail -1))
但是,如果我不使用 bash 的命令替換,並將其通過管道傳輸到 xargs 之類的
$ tshark 2> >(tail -1) | xargs sudo apt-get install tshark
我想知道為什麼管道到 xargs 似乎沒有效果。
但如果我嘗試
$ tshark 2> >(tail -1) | xargs xargs
sudo
提示我輸入正確的密碼,而不是apt-get
在 Y/N 之後中止安裝與否。如果我通過管道傳輸到
bash
.歡迎任何回應或提示。
回答
除非您重新執行命令並自己擷取輸出,否則您不能重用未明確擷取的命令(管道等)的輸出。
Bash 不會將命令輸出儲存在任何變數中,這與它儲存命令退出程式碼和命令歷史記錄的方式不同。您的終端有輸出,而 bash 也不會為自己保留一份副本。
因此,如果您想同時避免命令替換,我將得出結論,您無法從這裡到達那裡。
選項
如果真正的問題是“我怎樣才能輕鬆地獲取我在終端上一行看到的輸出,並將其作為命令輸入命令提示符而無需大量輸入?” 你可以通過幾種方式解決這個問題。
- 使用
readline
快捷方式使編輯命令更加輕鬆。例如,您對@choroba 在其他地方的好建議的回應是編輯最後一個命令輸入太多。readline 快捷方式
CTRL-a
可以CTRL-e
使編輯最後一個命令(CTRL-p
而不是UP
右邊的 waaaay 到達)更快。
- 使用終端多路復用器,例如
screen
或tmux
。我更喜歡tumx
. 複製和粘貼非常輕鬆,只需簡單CTRL-a
CTRL-[
地跳轉到複製模式和幾個 VI 鍵,您就可以將所需的行直接複製到下一個提示符中(使用引導鍵進行tmux
設置CTRL-a
。希望這提供了一些其他的觀點。