我有許多bash腳本,每個腳本都快樂地做自己的事情。請注意,雖然我使用其他語言進行編程,但我只使用Bash來自動化,並不是很擅長。在bash中解析命令輸出到變量
我現在正在嘗試將其中的一些腳本組合起來,以創建「元」腳本,如果您願意的話,可以使用其他腳本作爲步驟。問題是我需要解析每個步驟的輸出,以便能夠將其一部分作爲參數傳遞給下一步。
一個例子:
stepA.sh
[...does stuff here...]
echo "Task complete successfuly"
echo "Files available at: $d1/$1"
echo "Logs available at: $d2/$1"
上述兩個都是路徑,例如/ var /網絡/ thisisatest和/ var /日誌/ thisisatest(注意,文件總是用/ VAR開始/ www和日誌始終以/ var/log開頭)。我只對文件路徑感興趣。
steB.sh
[...does stuff here...]
echo "Creation of $d1 complete."
echo "Access with username $usr and password $pass"
所有變量這裏有簡單的字符串,可以包含特殊字符(無空格)
我試圖建立是運行stepA.sh
,然後stepB.sh
和使用腳本每個人的輸出做自己的東西。什麼我目前做的(上述兩種腳本符號鏈接到/ usr/local/bin目錄,而不.sh
部分並提出可執行文件):
#!/bin/bash
stepA $1 | while read -r line; do
# Create the container, and grab the file location
# then pass it to then next pipe
if [[ "$line" == *:* ]]
then
POS=`expr index "$line" "/"`
PTH="/${line:$POS}"
if [[ "$PTH" == *www* ]]
then
#OK, have what I need here, now what?
echo $PTH;
fi
fi
done
# Somehow get $PTH here
stepB $1 | while read -r line; do
...
done
#somehow have the required strings here
我被困在經過PTH
下一個步驟。我知道這是因爲管道在子shell中運行它,但是我所見過的所有示例都涉及到文件而不是命令,而且我無法使其工作。我試圖通過管道將echo
到「下一步」,如
stepA | while ...
echo $PTH
done | while ...
#Got my var here, but cannot run stuff
done
如何運行stepA
並有PTH
變量可供以後? 是否有一種「更好的方式」從嵌套if
s中提取我需要的路徑?
在此先感謝!
+1對於格式化良好的問題以及對您的問題很明顯的工作。但是......很難理解我們如何提供幫助。當前流程的一些實際輸出可能會有所幫助,另外還有一些預期輸出,既可以作爲最終輸出,也可以作爲步驟A和步驟B的中間輸出中所看到的內容。另外我還不清楚,如果你只是想讓PTH的值在stepA-> B之間通過,或者你是否希望步驟B有一個$ PTH變量(帶有一個值),那麼它已經從stepA「繼承」了。祝你好運! – shellter 2013-03-09 14:06:44