2017-09-27 25 views
-1

をbashにperlのから文字列を返す:私は戻って私のシェルにそれを渡すことができる方法上の任意のアイデアを
Can't return outside a subroutine at ...私はシェルスクリプトに文字列を返すようにしようとしていると私は取得し、エラー

$result = "Error: $ARGV[0] changed!" 
return ($result); 

+0

我々は標準出力にコマンドのすべての出力をキャプチャしたい場合あなたは通常、 'print"エラーを使います:$ ARGV [0]は\ n "'または '' say "..." 'を変更しました。 エラーメッセージが示すように、 'return'はサブルーチンからその呼び出し元に値を返すために使用されます。 – Botje

+0

どのように私のシェルスクリプト内の文字列をキャッチすることができますか? –

+0

ローカルの 'sh'マニュアルページの' $(...) 'や' \ '... \' '演算子を参照してください。 – Botje

答えて

1

Bashには戻り値の概念がありません。代わりに、

  • コマンドには、成功/失敗を示す終了値があります。終了コード0は成功です。スクリプトがdie()でなければPerlは自動的に成功して終了します。

  • コマンドはファイル記述子に書き込むことができます。 stdout。この出力は、Bashによってリダイレクトされ、キャプチャされます。

したがって、プログラム(Perlなどで書かれている)がデータをBashで利用できるようにする場合は、データを印刷する必要があります。

など。

result="$(yourcommand arg1 arg2)" 

多くの場合、出力は別のコマンドにパイプされています:

yourcommand arg1 arg2 | grep Error # all lines including "Error" 

またはファイルに書き込ま:

yourcommand arg1 arg2 >file.txt 
関連する問題