[英]Bash Scripting - shell command output redirection
有人可以幫助解釋以下內容:
如果我輸入:
a=`ls -l`
然后ls命令的輸出保存在變量a
但如果我嘗試:
a=`sh ./somefile`
結果輸出到shell( stdout
)而不是變量a
我所期望的是shell嘗試執行存儲在變量中的腳本' somefile
'的結果操作。
請指出我的理解有什么問題,以及可能的方法。
謝謝。
編輯:
只是為了澄清,腳本' somefile
'可能存在也可能不存在。 如果它存在,那么我希望腳本的輸出存儲在' a
'中。 如果沒有,我想在' a
'中存儲錯誤消息“no such file or dir”
我認為因為shell可能會將自己附加到/ dev / tty但我可能錯了。 為什么不在腳本上設置執行權限並使用:
a=`./somefile`
如果要將stderr 和 stdout捕獲到a,只需使用:
a=`./somefile 2>&1`
要檢查文件是可執行的:
if [[ -x ./somefile ]] ; then
a=$(./somefile 2>&1)
else
a="Couldn't find the darned thing."
fi
你會注意到我正在切換到$()方法而不是反引號。 我更喜歡$(),因為你可以嵌套它們(例如,“ a=$(expr 1 + $(expr 2 + 3))
”)。
您可以嘗試新的和改進的命令替換方法,使用$()而不是反引號。
a=$(sh ./somefile)
如果它仍然不起作用,請檢查某個文件是否實際上不是stderr 。
你是對的,。/ ./somefile
的stdout存儲在變量a
。 但是,我假設某些文件輸出到stderr。 你可以在./somefile
之后直接用2>&1
重定向它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.