質問: シェルの中からシェルを呼び出して判定 unixで以下のようなシェルが動作しております。 #!/bin/sh su abcdef -c './ghi'; err=$? if [! $err -eq 0 ] then echo エラーが発生しました fi exit このシェルは「abcdef」ユーザに移ってカレントディレクトリのシェルコマンド「ghi」の結果を判定するというものです。 unix上では問題なく動作しております。 これをlinuxでそのまま動作させると「err」に「su abcdef」というユーザ切替コマンド自身の正否を格納しているようです。 「'」でくくられた範囲内で結果をファイルに格納したりして、その後ファイルの中を見て判断するとうまくいくことは分かっておりますが、出来たらファイルなど使いたくありません。 このような場合、みなさんどうしてるんでしょうか? よく出てくるパタンだと思うのですがどうしても良い対処が見つかりません。 どうか宜しくお願いします。 linuxは「miracle-linux2.0」というosです、いわゆるredhat系です。
回答: このスクリプトが何かの1部でなくこれで全体なら、 su abcdef -c './ghi || echo エラーが発生しました' でいいんですけどね。 そうじゃない場合、ghiが何も標準出力に出力しないとすると、 err=`su abcdef -c './ghi; echo $?'` もし、ghiが何か出力しても、単にターミナルに出していいなら err=`su abcdef -c './ghi >/dev/tty; echo $?'` でokです。 このシェルスクリプト出力全体のリダイレクトを考慮して/dev/ttyじゃなくてghiの出力をどうしても標準出力に出したいなら、 exec 3>&1 err=`su abcdef -c './ghi >&3; echo $?'` exec 3>&- で多分できると思います(多分...)。