2017-12-15 4 views
0

私は2つのファイルを持っています。 1つはdate_command.txt、もう1つはjob_v3.shです
date_command.txtの内容は「time、command」.ex:「1211、service nginx restart」
date_commandからファイルを読み込むコードです.txtを入力し、システム時刻と時刻を比較します。
時間が等しい場合は、コマンドを実行します。
job_v3.shのソースコードは次のとおりです。ファイルから読み込むとコマンドが機能しません。 ex:echo

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"のときは実行できません。
誰かが私の問題を解決できることを願っています。
私は非常に感謝します。

+0

コマンド '1234エコー>> 1234.txt'はあなたの '$ daあなたが 'service nginx restart'の後に2番目のコマンドを追加すると意味しますか? – invad0r

+0

1つのコマンド。たとえば、「1215、echo 1234 >> /1234.txt」となります。実行できません –

答えて

0

これは、>>がリテラル引数として解釈されるのは、シェルがコマンドをどのように解析するかによるものであり、可変展開はリダイレクトを変更できないためです。 リテラル

${dateCommand[1]} 

を再解釈するredirectionsshell expansion

eval ${dateCommand[1]} 

evalに変更することができます参照すると、あなたは構文解析がどのように行われるかを理解する必要があり危険であるにも(ファイルから来て)任意のコマンドを実行します危険です。

最小例:

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

123 >> 123.txt 

eval $cmd 

がファイルに123を追加し、標準出力に書き込みます123.ttx

関連する問題