[過去ログ] くだらねえ質問はここに書き込め! Part 234 (1002レス)
前次1-
抽出解除 レス栞

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
399
(3): 2018/12/22(土)20:12 ID:TtAeAAdm(1) AAS
シェルスクリプトで

touch $LOGERR
exec 2> $LOGERR
コマンド
$LOGERRがあるならメール送ったり、$LOGERRを削除

みたいな部分があるのですが、

2> $LOGERR はエラーログを記録するのはわかるのですが、
execコマンドはそもそも何をしているのでしょうか?

コマンド 2> $LOGERR はコマンドを実行してそのエラーログを格納するのは理解できるのですが、
execというものを使ったことがないので、よくわかっていません。
400
(1): 2018/12/22(土)21:01 ID:0mXx4pJn(1) AAS
>>399
exec以降のコマンドの標準エラー出力が$LOGERRにリダイレクトされるようになる
402
(1): 2018/12/23(日)05:37 ID:HJ+H2evR(1/4) AAS
>>399
シェルスクリプトのexecは、カーネルのexecシステムコールを呼び出すもの
機能としては外部コマンド呼び出しに近いが、外部コマンドが終了しても処理が戻ってくることはない
callではなくgotoといったらわかるかもしれないな
プロセスの入れ替え。だからpidも変わらないし、プロセスツリーが深くなったりもしない

これがexecの機能なのだが、補足としてexecで呼び出す外部コマンドを指定しなかった場合は
エラーになったり終了するのではなく、現在のプロセス(カレントシェル)の処理が
そのまま続行するという仕様がある

この仕様を利用し、execで(外部コマンドを書かずに)リダイレクトのみを書いておくことで
カレントシェルの出力先を変更して処理を続行することが出来る
省5
404: 399 2018/12/23(日)09:58 ID:91g6WTHO(1) AAS
>>400-403
レスありがとうございます。
ユーザ権限でexec lsやexec ps -aef などをすると、確かに標準出力をした後にバッサリ切断されました
素人的に「?」なのは、exec lsなど後にコマンドが来るのはわかるのですが、
exec 2> $LOGERR の「2>」はコマンドでは無いと思うのですが、もしかして「2>」はリダイレクトコマンドの省略型なのでしょうか?

>exec以降のコマンドの標準エラー出力が
とありますが、それをエラー出力に戻すこともexecコマンドなのでしょうか。

バックアップのシェルスクリプトで見かけたのですが、execコマンドを意図的に使っているのは
execコマンドを使わないとできないことなのか、この時代なら使わないに越したことは無いのでしょうか?

スクリプトの最後に
省12
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.041s