2016-07-18 4 views
-4

これはおそらく私がどこかで作ったばかげたミスですが、何が起こっているのか分かりません。私はここでいくつかの助けを見つけることができます願っています。Bashのバックチックの呼び出しブロックはいつまでも

私はいくつかのオプションの変数$1,$2,$3などを期待しているスクリプトcallee.shを持っています。そして、スクリプトのエコーがたくさんあります(出力の複数行)。結果として最後の行だけが必要です。他の行はデバッグステータスレポートです。

この

result=`./callee.sh | tail -n 1`のような結果を変数に割り当てようが、それはcallee.sh

に入ることはありません、それは

result=`./callee.sh param1 param2 param2 | tail -n 1`をパラメータを取る場合、コードは永遠にブロックし、しかし完全に

の作品

コンパイルのために実行しようとしました

result=`./callee.sh`は、これは動作しますが、すべての行が1行に追加(それは大丈夫です)

だけでなく、永遠にハング

result=`./callee.sh param1 param2 param2`を実行しています。入力しないでくださいcallee.sh

どうしたのですか?代わりに私は何をすべきですか?

+2

コマンド './callee.sh param1 param2 param2'(バッククォートなし)は実行にどれくらいの時間がかかりますか? – Leon

+0

誤字を指摘してくれてありがとう。 – user1763590

+6

'./callee.sh'が完了しても' ./callee.sh param1 param2 param2'が永遠にハングする場合、問題は 'callee.sh'の中にあります。 – John1024

答えて

-1

callee.shの呼び出しがパラメータでハングしている場合は、パラメータを使用してスクリプト外で実行してみてください。 とにかく、出力を保存する最良の方法その後):

result="$(./callee.sh param1 param2 param2)" 
echo "${result}" <--- this should show the line breaks 
+0

ええ、このようなスクリプトを呼び出すとハングアップします。私がハングアップしたとき、私はスクリプトが決して入力されないことを意味する。私が '' 'tail''をインラインにしようとした理由は、そうでなければ複数行の出力が1行に追加され、' 'tail''が必要なものでないものを返すからです。しかし、それはポイントの横にある。 '' 'tail''がなくてもスクリプトは決して呼び出されません。 – user1763590

0

は、コードなしで知ってはいけない、しかし短い答えは

result=$(./callee.sh ...) 

の代わりにバッククォートを使用することです。 $(...)はネストされたかっこを正しく処理します。

また、\の代わりに/を使用してください。

@Leonが指摘したように、tail -n -1ではなくtail -1またはtail -n 1を使用してください。

+0

' '' result = $(./ callee.sh param1 param2 param3) '' ' これまでどおりにハングアップします。 '' '。/ callee.sh'''を入力しないでください。入れ子にしたバックティックとは関係がないようですが、 – user1763590

+1

これは主にスタイルの提案です。非常に良いものですが、それはOPの問題を解決しません。 – chepner

+2

@ user1763590 'callee.sh'の中でぶら下がっているのではなく、' callee.sh'を入力していないことをどうやって知っていますか? 'callee.sh'と呼び出しコードをまだ問題を示している最小の例まで整えてから[その質問を編集する](http://stackoverflow.com/posts/38443957/edit)にその例のコードを含めてください、呼び出し元のスクリプトと 'callee.sh'の両方。ありがとうございました! – cxw

関連する問題