2016-05-10 9 views
1

シェルで変数を渡すために出力リダイレクションをbashで実行したい。例えば外部アクションを実行するには変数を渡すが、bashではコマンドパラメータではない

OPTION=">> /tmp/log1 2>&1" 
ADD_OPTION=($OPTION) 
ls ${ADD_OPTION[@]} 

私はを/ tmp/LOG1lsコマンドの結果を記録したいです。 すると、ls >> /tmp/log1 2>&1が実行されます。

しかし、残念ながら、${ADD_OPTION[@]}は、lsのパラメータとして扱われました。 実際の結果:

ls: >>: No such file or directory 
ls: /tmp/log1: No such file or directory 
ls: 2>&1: No such file or directory 

どうすればよいですか?

+0

さらには、bash -c "のls $ {ADD_OPTION [@]}" 目標のために実行することができ何をしたいのか考えられます。しかし、他のニーズの理由から、私はもう一つのアプローチが必要です。 – Dorleeze

答えて

1

あなたはevalを使用することができます。

eval ls ${OPTION} 

を明らか注意点として、evalに注意してください。

例:

$ OPTION=">> /tmp/log1 2>&1" 

$ eval ls ${OPTION} 

$ cat /tmp/log1 
1 
2 
3 
+0

ありがとう、それは私の問題を解決しました。 – Dorleeze

+0

'eval'は問題ありませんが、その使用には注意が必要です。あなたは 'cmd =" sudo rm -rf/forms "と' eval $ {cmd/forms /} 'をしたくないでしょう... –

+0

@ DavidC.Rankinまさに.. – heemayl

0
eval $(echo "ls ${ADD_OPTION[@]}") 

あなたは

関連する問題