2017-02-16 8 views
0

非常に単純なファイルtest.shがあります。複数のコマンドを引数としてbashスクリプトに渡します。

#!/usr/bin/env bash 

$1 

私は./test.sh "pwd; mkdir a;"を実行すると、それは私が使用しようとした

./test.sh: line 3: pwd;: command not found 

'を返す&'/'& &'/';' が、すべては動作しません。 arugmentで複数のコマンドを実行するにはどうすればよいですか?

+0

これを試す複数のコマンドを実行する論理演算子(||)については、https://www.howtogeek.com/269509/how-to-run-two-or-more-terminal-commands-at- once-in-linux/this – Abi

+0

./test.sh; pwd; mkdir a – Hussain

+0

スクリプトの引数として一連のコマンドを渡す必要がある理由を説明できますか?あなたの質問に対する答えがあなたにとって有益であるかもしれないが、あなたには何か他のものがあるかもしれない。コードにスクリプトに渡されるデータを使用するので、最初にスクリプトにコマンドを渡すのを避ける方法を学ぶことが多い。セキュリティからの最適/驚きやバグの回避を避けます。 – Fred

答えて

2

bashは、文字列($1)をあたかもスクリプトまたは入力コマンドであるかのように解釈しようとしています。それを行うには2つの方法があります。

  1. eval組み込み用途:eval $1の代わり$1が。
  2. bashを別々に実行して、コマンドを評価してください:の代わりにbash -c "$1"引用符を気にしてください。
+0

Thx! 'test.sh'を編集できない場合、この問題を解決する方法はありません。 – mayTree

+0

@mayTree必要な内容の一時的なスクリプトを作成して実行可能にし、その名前を 'test.sh'の引数として渡すことができます – yeputons

+0

あなたは正しいです!ありがとう! – mayTree

関連する問題