[解決済み】シェルスクリプトでのexecコマンドの使い方は?[クローズド]
質問
シェルスクリプトのexecコマンドの使い方を簡単な例で説明してくれる人はいませんか?
どのように解決するのですか?
その
exec
組み込みコマンドはカーネル内の関数をミラーするものであり、その一群は
execve
これは通常C言語から呼び出されます。
exec
は、現在のプロセスで、現在のプログラムを
fork
を使用することで、新しいプロセスを作成することができます。 すべてのスクリプトで使うものではありませんが、時折、便利なことがあります。 ここでは、私が使ったことのあるシナリオをいくつか紹介します。
-
シェルにアクセスすることなく、特定のアプリケーションプログラムを実行させたい。 etc/passwdでサインインプログラムを変更することもできますが、スタートアップファイルから環境設定を利用させたい場合があります。 そこで、(例えば)
.profile
のように、最後の文に書かれています。exec appln-program
ということで、今は戻るべきシェルがありません。 たとえ
appln-program
がクラッシュした場合、エンドユーザーはシェルにアクセスすることができません。exec
が置き換わる。 -
etc/passwdに登録されているシェルとは別のシェルを使いたいのですが。 バカげていると思われるかもしれませんが、サイトによっては、ユーザーがサインインするシェルを変更することを許可していない場合があります。 私が知っているあるサイトでは、全員が
csh
を入力し、その後に.login
(csh起動ファイル)の呼び出しはksh
. これはうまくいったのですが、その一方でcsh
プロセスが実行され、ログアウトが2段階になり、混乱する可能性がありました。そこで、私たちはこれをexec ksh
これは、c-shell プログラムを korn シェルに置き換えただけで、すべてがシンプルになりました(これには、他にも問題があります。ksh
はログインシェルではありません)。 -
ただ、プロセスを節約するために もし私たちが
prog1 -> prog2 -> prog3 -> prog4
などで、二度と戻らないように、それぞれの呼び出しをexecにしましょう。 これはリソースを節約し(繰り返さない限り、確かに大したことではありませんが)、シャットダウンをより単純にします。
をご覧になったことがあるかと思います。
exec
もし、あなたが悩んでいるコードを示してくだされば、その使用を正当化できるかもしれません。
編集
: 上の回答が不完全であることに気づきました。 そこには
二
を使用します。
exec
のようなシェルで
ksh
と
bash
- ファイルディスクリプタを開くために使用されます。 以下はその例です。
exec 3< thisfile # open "thisfile" for reading on file descriptor 3
exec 4> thatfile # open "thatfile" for writing on file descriptor 4
exec 8<> tother # open "tother" for reading and writing on fd 8
exec 6>> other # open "other" for appending on file descriptor 6
exec 5<&0 # copy read file descriptor 0 onto file descriptor 5
exec 7>&4 # copy write file descriptor 4 onto 7
exec 3<&- # close the read file descriptor 3
exec 6>&- # close the write file descriptor 6
ここでは、スペーシングが非常に重要であることに注意してください。 もしfd番号とリダイレクションシンボルの間にスペースを入れてしまうと
exec
は元の意味に戻ります。
exec 3 < thisfile # oops, overwrite the current program with command "3"
これらを使用する方法はいくつかあり、kshでは
read -u
または
print -u
である。
bash
といった具合に。
read <&3
echo stuff >&4
関連
-
[解決済み] Bashシェルスクリプトでディレクトリが存在するかどうかを確認するにはどうすればよいですか?
-
[解決済み] シェルで、「2>&1」はどういう意味ですか?
-
[解決済み] ディレクトリが存在しない場合のみmkdirする方法は?
-
[解決済み] Bashでコマンドの出力に変数を設定するにはどうすればよいですか?
-
[解決済み] Git上でシェルコマンドを実行する際に使用するSSH-keyの秘密鍵を指定する方法は?
-
[解決済み] シェルコマンドの実行と出力のキャプチャ
-
[解決済み] コマンドラインから .bash_profile を再読み込みする方法は?
-
[解決済み] POSIX」の意味を教えてください。
-
[解決済み] 整数の合計を1行に1つずつ表示するシェルコマンド?
-
[解決済み] 特定のファイル/フォルダを除外してディレクトリをtarするシェルコマンド
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] ファイルにechoコマンドで書き込み、追記するには?
-
[解決済み] scpを使ってリモートからローカルにフォルダをコピーするにはどうしたらいいですか?
-
[解決済み] ファイルの行の順番を逆にするにはどうすればよいですか?
-
[解決済み] UnixでLessを使って特定の行番号に移動する
-
[解決済み】Bashで複数行のコメントを作成する方法は?
-
[解決済み】シェルスクリプトの終了時にバックグラウンドプロセスやジョブを強制終了するにはどうすればいいですか?
-
[解決済み】sshのタイムアウトを設定する方法は?
-
[解決済み】$の意味?(ドルクエスチョンマーク)の意味
-
[解決済み] 2つのファイルを一行ずつ比較し、その差分を別のファイルに生成する。
-
[解決済み] バイナリデータを含むテキストファイルを grep するには?