今天写了个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)}'
执行结果正确。
网友评论