从文件中读取命令时,命令无法工作。回复:回声

时间:2017-12-15 08:26:39

标签: bash

我有两个档案。一个是date_command.txt,另一个是job_v3.sh
date_command.txt的内容是“time,command”.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&gt;&gt; 1234.txt”时,它无法运行 希望有人能为我解决问题 我将非常感激。

1 个答案:

答案 0 :(得分:0)

这是因为>>被解释为文字参数,这是由于shell如何解析命令,变量扩展无法改变重定向。 请参阅redirectionsshell expansion

重新解释文字

${dateCommand[1]}

可以更改为

eval ${dateCommand[1]}

eval是危险的,你必须了解如何解析,同时执行任意命令(从文件中提交)是危险的。

最小例子:

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

写入标准输出

123 >> 123.txt

eval $cmd

将123添加到文件123.ttx