テキストファイルを読み込むスクリプトを作成しようとしていて、 "run"または "chk"という単語で始まるすべての行をコマンドとして実行しようとしています。これは私がこれまで持っているものです。テキストファイルからbashスクリプトを使ってコマンドを実行する
#!/bin/bash
counter=1
for i in [email protected]
do
while read -r line
do
if [[ ${line:0:4} == "run " ]]
then
echo "Now running line $counter"
${line:4:${#line}}
elif [[ ${line:0:4} == "chk " ]]
then
echo "Now checking line $counter"
${line:4:${#line}}
elif [[ ${line:0:2} == "# " ]]
then
echo "Line $counter is a comment"
else
echo "Line $counter: '$line' is an invalid line"
fi
counter=$((counter+1))
done<$i
done
しかし、私はそれを持つテキストファイルを供給する場合、例えば
run echo > temp.txt
コマンドは、それが実際にTEMP.TXTというファイルを作成しません、それは単に "> temp.txt"をstdoutに返します。私は
run program arguments > filename.txt
ような何かをしようとしたとき、私が望むように、それはまた同じようなことは、これは、ファイル内のプログラムの出力を入れていないんが、それはむしろ、ファイル名として「>」を処理しようとします。
私はこれが超特有でおそらく明白なことだと知っていますが、私はbashとすべてのシェルスクリプトについて非常に新しいです。あなたは、変数のすべての通常のシェルの構文解析を行うためにeval
を使用する必要が
おかげ
変数の展開時に、ほとんどの特殊文字は処理されません。通常のシェル解析を行うには、 'eval'を使う必要があります。 – Barmar
は、部分文字列をコマンドとして登録しますか? –
'eval'は通常のシェルコマンドと同じように文字列を実行します。 – Barmar