タグ付けされた質問 「exec」

exec()ファミリーの関数は、現在のプロセスイメージを新しいプロセスイメージに置き換え、古いプロセスのpidとパイプを保持します。このタグは、現在のシェルをプログラムまたはさまざまなリダイレクト関連のものに置き換えるために使用できる組み込みシェルにも使用されます。

4
stdoutとstderrをログファイルにコピーし、スクリプト自体のコンソールに残します。
bashを使用して、stderrとstdoutをログファイルにコピーし、コンソールに表示したままにするにはどうすればよいですか? execを使用して、スクリプト自体の中でこれを実行したいと思います。 私が試した exec &>> log.out echo "This is stdout" echo "This is stderr" >&2 しかし、上記はコンソールに何も出力しません。どうすればこれをbashで実現できますか?
11 bash  exec  stderr 

5
終了コマンドの終了コードをキャプチャする
私はこれをbashスクリプトに入れています: exit 3; exit_code="$?" if [[ "$exit_code" != "0" ]]; then echo -e "${r2g_magenta}Your r2g process is exiting with code $exit_code.${r2g_no_color}"; exit "$exit_code"; fi exitコマンドの直後に終了するように見えますが、これは理にかなっています。私はすぐに終了せずに終了コードを提供できるいくつかの簡単なコマンドがあるのだろうかと思っていましたか? 私は推測するつもりでした: exec exit 3 しかし、エラーメッセージが表示されますexec: exit: not found。私に何ができる?:)

4
いつfork()とexec()を呼び出すのですか?
私はfork()およびexec()コマンドについて学習しています。fork()とexec()は通常一緒に呼び出されるようです。(fork()は新しい子プロセスを作成し、exec()は現在のプロセスイメージを新しいプロセスに置き換えます。)ただし、どの関数を使用して各関数を独自に呼び出すのでしょうか。このようなシナリオはありますか?

2
grub2 configからのコマンド「exec tail -n +3 $ 0」にはどのようなロジックがありますか?
カスタムメニューエントリを作成すると、次のコマンドが表示されなくなります。 exec tail -n +3 $0 ターミナルで試してみましたが、奇妙な結果になり、理解できません。このコマンドが正確に何をするのか、なぜgrubがそれを必要とするのか理解できません。説明して頂けますか?
8 shell  grub2  tail  exec 

1
bashはどのようにELFファイルを実行しますか?
Linux Boxにいるときは、bashをシェルとして使用します。今、私はbashがELFファイルの実行をどのように処理するかを疑問に思いました。私はbash-4.3.tar.gzをgrepしました。ファイルがELFであるかどうかを確認するためのマジック番号パーサーのようなものも、exec()システムコールも見つかりませんでした。 プロセスはどのように機能しますか?ELFの実行をbashがOSに渡す方法を教えてください。
8 bash  kernel  executable  exec  elf 

4
スクリプト出力のリダイレクトとログ
次のスニペットを整理しようとしています。設計目標は、スクリプトからのすべての出力をログに記録することであり、ラッパーであってはなりません。線が少ないほど良いです。 (この段階では)ユーザー入力は気にしません。ターゲットスクリプトは非対話的に実行されます。 スニペットは ログにstdoutを出力し、常にコンソールにエコーする ログにstderrを出力し、デバッグが有効な場合はコンソールにエコー stderrメッセージには、タイムスタンプとその他の有用性をプレフィックスとして付ける必要があります 現時点では、Ubuntuのように最近のバージョンのbash(4.2以降?)でのみテストできますが、CentOS6では正しく動作しません。 DEBUG_LOG="${0##*/}.log" # copy stdout to log always and echo to console exec > >(tee -a ${DEBUG_LOG}) # copy stderr to log only, unless debugging is enabled [ $DEBUG_TEST = "true" ] \ && exec 2> >(tee -a ${DEBUG_LOG} >&2) \ || exec 2>> …

1
chshまたは管理者権限なしでデフォルトのシェルを変更する
私はこのスレッドで次のスニペットを見ました:デフォルトのシェルとしてcshからbashに変更する方法 sleep 2 if (-x /usr/local/bin/bash) then exec /bin/sh -c '. ~/.profile; exec /usr/local/bin/bash' endif 私の理解では、このスニペットを~/.loginそこに配置するとbash、ログイン時に呼び出されます。 同様のスニペットを使用して、zshログインに使用するデフォルトのバージョンとは異なるバージョンを呼び出したいという同様の状況があります。この問題が発生する理由の一部は、選択できないためですでzsh許可されているオプションのの希望するバージョンで、chsh管理者権限がありません。 これとともに: 異なるバージョンのzshを切り替えるときに、上記のスニペットをどのように変更すればよいですか? exec上記のスニペットに2つのコマンドが必要なのはなぜですか?彼らは何をしますか?また、なぜ使用上のスニペットはありませんsh し、 bash(ユーザーが持つログインになっていますcsh)
8 shell  zsh  login  exec 
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.