shell將變量當命令執行問題【多條命令同時執行問題】
今天寫了個shell腳本,腳本中需要將變量當做shell命令運行,通常的方法有多種,比如:
`${var}` 將變量內容當shell命令行執行
$(${var}) 將變量內容當shell命令執行
${var}將變量內容當shell命令執行【不推薦此種方法】
但是這3種方法只能運行單條命令,當命令是下面類型時就會有問題:
VAR1='cd /home ;echo "hello";echo "good"'
VAR2='cd /home && echo "hello" && echo "good"'
此時執行
$(${VAR1}) 就會發現沒有輸出,通過跟蹤命令執行過程發現shell自動將 ; && 使用''進行了限制,爲了解決這個問題查了很多資料,沒有好的解決方法,
通常我們的crontab 命令會有此種寫法,而且執行沒有問題,通過查看crontab的資料,發現使用的system函數,所以最後使用awk的system函數解決問題。
解決方法:
VAR1='cd /home ;echo "hello";echo "good"'
VAR2='cd /home && echo "hello" && echo "good"'
echo ${VAR1}|awk '{run=$0;system(run)}'
echo ${VAR2}|awk '{run=$0;system(run)}'
執行結果正確
hello
good
hello
good