Bash

如何在沒有 bash 的命令替換的情況下執行輸出字元串?

  • July 13, 2017

如何在沒有 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 也不會為自己保留一份副本。

因此,如果您想同時避免命令替換,我將得出結論,您無法從這裡到達那裡。

選項

如果真正的問題是“我怎樣才能輕鬆地獲取我在終端上一行看到的輸出,並將其作為命令輸入命令提示符而無需大量輸入?” 你可以通過幾種方式解決這個問題。

  1. 使用readline快捷方式使編輯命令更加輕鬆。

例如,您對@choroba 在其他地方的好建議的回應是編輯最後一個命令輸入太多。readline 快捷方式CTRL-a可以CTRL-e使編輯最後一個命令(CTRL-p而不是UP右邊的 waaaay 到達)更快。

  1. 使用終端多路復用器,例如screentmux。我更喜歡tumx. 複製和粘貼非常輕鬆,只需簡單CTRL-a CTRL-[地跳轉到複製模式和幾個 VI 鍵,您就可以將所需的行直接複製到下一個提示符中(使用引導鍵進行tmux設置CTRL-a

希望這提供了一些其他的觀點。

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