簡體   English   中英

Bash Scripting - shell命令輸出重定向

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM