出力リダイレクトを使用してcshからスクリプトを呼び出す

出力リダイレクトを使用してcshからスクリプトを呼び出す

私が欲しいもの:

#!/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"

関連情報