我有两个档案。一个是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”时,它无法运行
希望有人能为我解决问题
我将非常感激。
答案 0 :(得分:0)
这是因为>>
被解释为文字参数,这是由于shell如何解析命令,变量扩展无法改变重定向。
请参阅redirections和shell expansion
重新解释文字
${dateCommand[1]}
可以更改为
eval ${dateCommand[1]}
eval
是危险的,你必须了解如何解析,同时执行任意命令(从文件中提交)是危险的。
最小例子:
cmd='echo 123 >> 123.txt'
$cmd
写入标准输出
123 >> 123.txt
和
eval $cmd
将123添加到文件123.ttx