私が欲しいもの:
#!/bin/csh
# call /myscriptpath/myscript.any and redirect 2>&1 and get retval and output
set my_msg = `/myscriptpath/myscript.any`
set my_ret = `echo $?`
- myscript.anyで終了コードをキャプチャする方法は?
- 可能であれば、myscript.anyでメッセージをどのようにキャプチャできますか?
/myscriptpath/myscript.any これは期待どおり bash コマンドラインから呼び出されます。
答え1
2>&1
同等のものを処理してキャプチャする簡単な方法はありません。標準エラーまた標準出力、特に終了状態も必要な場合。ただし、2 つをパイピングすると、cat
出力ストリームがマージされます。
#!/usr/bin/csh
set my_tmp = ~/.msg.$$.tmp
set my_msg = `( /myscriptpath/myscript.any; echo $? >"$my_tmp" ) |& cat`
set my_ret = `cat "$my_tmp"`
rm -f "$my_tmp"
echo "ret=$my_ret, msg=$my_msg"
またはまたは/dev/stout
、Linuxベースのシステムなどの環境で実行している場合は、my_msg
次のように割り当てます。
set my_msg = `/myscriptpath/myscript.any >& /dev/stdout`
より簡単なバリエーションは、リダイレクト機能を使用することcommand |& cat
です。/bin/sh
結果のcsh
ブロックは次のとおりです$my_tmp
。
#!/usr/bin/csh
set my_msg = `sh -c '/myscriptpath/myscript.any 2>&1'`
set my_ret = $status
echo "ret=$my_ret, msg=$my_msg"