亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用Bash自動將上一條命令的輸出捕獲到變量中?

使用Bash自動將上一條命令的輸出捕獲到變量中?

泛舟湖上清波郎朗 2019-11-23 11:23:29
我希望能夠在后續命令中使用最后執行的命令的結果。例如,$ find . -name foo.txt./home/user/some/directory/foo.txt現在假設我希望能夠在編輯器中打開文件,刪除文件或對其進行其他操作,例如mv <some-variable-that-contains-the-result> /some/new/location我該怎么做?也許使用一些bash變量?更新:為了澄清,我不想手動分配東西。我需要的是內置的bash變量,例如ls /tmpcd $_$_保留上一個命令的最后一個參數。我想要類似的東西,但使用最后一條命令的輸出。最終更新:塞思的答案非常有效。請記住以下幾點:touch /tmp/x初次嘗試時不要忘記僅當最后一個命令的退出代碼成功時才存儲結果
查看完整描述

3 回答

?
大話西游666

TA貢獻1817條經驗 獲得超14個贊

這是一個非常駭人聽聞的解決方案,但在某些時候似乎可以正常工作。在測試過程中,我注意到當^C在命令行上使用時,有時效果不佳,盡管我做了一些調整以使其表現得更好。


此hack僅是一種交互模式hack,我非常有信心不會將其推薦給任何人。后臺命令可能導致比正常情況更少的定義行為。其他答案是通過編程獲得結果的更好方法。


話雖如此,這是“解決方案”:


PROMPT_COMMAND='LAST="`cat /tmp/x`"; exec >/dev/tty; exec > >(tee /tmp/x)'

設置此bash環境變量并根據需要發出命令。 $LAST通常將具有您要查找的輸出:


startide seth> fortune

Courtship to marriage, as a very witty prologue to a very dull play.

                -- William Congreve

startide seth> echo "$LAST"

Courtship to marriage, as a very witty prologue to a very dull play.

                -- William Congreve


查看完整回答
反對 回復 2019-11-23
?
天涯盡頭無女友

TA貢獻1831條經驗 獲得超9個贊

我不知道會自動執行此操作的任何變量。除了復制粘貼結果外,還可以執行其他操作,例如,重新運行


vim $(!!)

!!歷史擴展在哪里,意思是“先前的命令”。


如果您希望文件名中包含空格或其他字符,這可能會阻止正確的參數解析,請對結果加引號(vim "$(!!)")。不加引號的情況將允許一次打開多個文件,只要它們不包含空格或其他shell解析標記即可。


查看完整回答
反對 回復 2019-11-23
?
慕標5832272

TA貢獻1966條經驗 獲得超4個贊

Bash是一種丑陋的語言。是的,您可以將輸出分配給變量


MY_VAR="$(find -name foo.txt)"

echo "$MY_VAR"

但最好在使用變量時小心正確地引用它!


最好直接對文件進行操作,例如使用find的-execdir(請參閱手冊)。


find -name foo.txt -execdir vim '{}' ';'

要么


find -name foo.txt -execdir rename 's/\.txt$/.xml/' '{}' ';'


查看完整回答
反對 回復 2019-11-23
  • 3 回答
  • 0 關注
  • 1433 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號