假設我在 Bash 中運行一個命令,例如:
ls -l | grep filename
如何將這兩個命令的輸出保存到變數中?換句話說,將“ls -l”和“grep filename”輸出到同一個變數?該命令必須使用管道。
先感謝您!
combinedOutput = ""
ls -l
total 4
-rw-r--r-- 1 webmaster webmaster 0 Nov 16 20:34 a
-rw-r--r-- 1 webmaster webmaster 0 Nov 16 20:34 b
-rw-r--r-- 1 webmaster webmaster 0 Nov 16 20:34 file1.txt
-rw-r--r-- 1 webmaster webmaster 0 Nov 16 20:34 file2.txt
-rw-r--r-- 1 webmaster webmaster 5 Nov 16 20:34 main.sh
ls -l | grep main.sh
-rw-r--r-- 1 webmaster webmaster 20 Nov 16 20:35 main.sh
echo $combinedOutput
total 4
-rw-r--r-- 1 webmaster webmaster 0 Nov 16 20:34 a
-rw-r--r-- 1 webmaster webmaster 0 Nov 16 20:34 b
-rw-r--r-- 1 webmaster webmaster 0 Nov 16 20:34 file1.txt
-rw-r--r-- 1 webmaster webmaster 0 Nov 16 20:34 file2.txt
-rw-r--r-- 1 webmaster webmaster 5 Nov 16 20:34 main.sh
-rw-r--r-- 1 webmaster webmaster 20 Nov 16 20:35 main.sh
更新#1: 一個更好的例子:假設我正在嘗試使用以下命令歸檔和壓縮目錄:
tar cvf - /some/directory/ | pigz --verbose -1 -p 4 >compressed_archive.tgz;
問題是如何將“tar cvf - /some/directory/”和“pigz --verbose -1 -p 4 >compressed_archive.tgz”的輸出放入一個變數。
uj5u.com熱心網友回復:
簡單地:
combinedOutput=$(( ls -l | tee /dev/stderr | grep filename ) 2>&1)
echo "$combinedOutput"
uj5u.com熱心網友回復:
只需運行兩個命令。
combinedOutput=$(
ls -l
ls -l | grep filename
)
但無論如何,您可能更愿意:
one=$(ls -l)
two=$(ls -l | grep filename)
combinedOutput="$one
$two"
無法獲得您想要的輸出echo $combinedOutput。你可以做到echo "$combinedOutput"。考慮研究 shell 參考。使用 shellcheck 檢查你的腳本。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/536853.html
標籤:狂欢管道
