当我从文件中读取命令时,命令不起作用。例如:回声



我有两个文件。一个是date_command.txt,另一个是job_v3.sh
date_command.txt的内容是"时间,命令" .ex:" 1211,service nginx restart"
job_v3.sh的代码是从date_command.txt读取文件,然后将时间与系统时间进行比较。
如果时间相等,请运行命令。
Job_v3.sh的源代码是:

dateCommand=`cat /root/bash_practice/date_command.txt`
echo $dateCommand
#IFS=',' read -a myarray <<< "$mystring"
IFS=',' read -a dateCommand <<< "$dateCommand"
#echo "Date: ${dateCommand[0]}"
#echo "Command: ${dateCommand[1]}"
DATE=`date '+%m%d'`
#echo $DATE
if [ ${dateCommand[0]} = $DATE ];
then
        echo $DATE
        echo 'Date is the same.'
        echo 'Current Time:'.$DATE
        echo 'Target Time:'.${dateCommand[0]}
        echo 'Command:'.${dateCommand[1]}
        ${dateCommand[1]}
else
        echo $DATE
        echo 'Date is different.'
        echo 'Current Time:'.$DATE
        echo 'Target Time:'.${dateCommand[0]}
        echo 'Command:'.${dateCommand[1]}
fi

现在可以运行。
但是当命令为" echo 1234>> 1234.txt"时,它无法运行。
希望有人可以为我解决问题。
我会非常感谢。

这是因为 >>被解释为字面参数,这是由于shells shells parse parse命令的命令,变量扩展不会改变重定向。请参阅重定向和外壳扩展

重新诠释文字

${dateCommand[1]}

可以更改为

eval ${dateCommand[1]}

eval是危险的,您必须了解解析的完成方式,执行任意命令(从文件开始)也很危险。

最小示例:

cmd='echo 123 >> 123.txt'
$cmd

写入标准输出

123 >> 123.txt

eval $cmd

附加123到文件123.ttx

最新更新