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

3
Linuxでコマンドの使用を待ちますか?
#!/bin/bash function back() { sleep $1 exit $2 } back $1 $2 & b=$! if `wait $!`;then echo success else echo failure fi bash-3.00# ./back 300 0 failure bash-3.00# ./back 300 1 failure success0を送信するときに終了ステータスとして期待していましたが、まだ取得していfailureます。 また、wait300秒待機しません。代わりに、すぐにメッセージを受け取ります。私は仮定$!の直接の子である$$私のスクリプトインチ そうじゃない? のような待機の終了ステータスをキャプチャすることは可能exit_status=$(wait $!)ですか? if ! ((exit_status));then echo sucess else failure fi

6
シェルスクリプトの終了ステータスに「予約済み」コードを使用する
最近、Advanced Bash-Scripting Guideのこの特別な意味を持つ終了コードのリストに出会いました。彼らはこれらのコードを予約済みとして参照し、以下を推奨しています。 上記の表によると、終了コード1-2、126-165、および255は特別な意味を持っているため、ユーザー指定の終了パラメーターには使用しないでください。 少し前に、次の終了ステータスコードを使用するスクリプトを作成しました。 0-成功 1-間違ったホスト名 2-無効な引数が指定されました 3-ユーザー権限が不十分 スクリプトを作成したとき、特別な終了コードを認識していなかったため、最初のエラー状態で1から開始し、連続するエラータイプごとに終了ステータスを増やしました。 後の段階で、他のスクリプト(ゼロ以外の終了コードをチェックできる)から呼び出せるように、スクリプトを作成しました。私は実際にまだそれをしていません。これまでのところ、インタラクティブシェル(Bash)からスクリプトを実行しただけで、カスタム終了コードを使用すると問題が発生する可能性があるかどうかを疑問に思っていました。Advanced Bash-Scripting Guideの推奨事項はどの程度重要/重要ですか? Bashのドキュメントには裏付けとなるアドバイスが見つかりませんでした。終了ステータスのセクションには、Bashが使用する終了コードがリストされているだけですが、これらのいずれも予約済みではなく、独自のスクリプト/プログラムで使用することを警告するものでもありません。

4
Unix端末でexitコマンドはどのように機能しますか?
誰かがexitコマンドがUnixターミナルでどのように機能するか説明してもらえますか? 検索man exit とはwhich exit有用ではなかったと私は、次の問題に遭遇しています。 新しいRed HatシステムにAnacondaとPyCharmのアドオンパッケージをインストールした後exit、ターミナルセッションを終了するように呼び出すと、一連のエラーが発生し、ターミナルが期待どおりに終了することに気付きました。エラーは、私の呼び出しがすることを示唆しているように見えるexitの呼び出しをトリガーされるrm ~/anaconda3/.../と、rm ~/PyCharm/....エラーを引き起こし、。すべてのディレクトリは、これらのプログラム用にダウンロードしたパッケージの場所(numpy)でもあるように見えます。以下を参照してください。 $ exit rm: cannot remove ‘~/anaconda3/lib/python3.5/site-packages/numpy/core’: Is a directory ... ... 解決済み 私の~/.bash_logoutファイルでは、行がありました find ~ -xdev ( -name *~ -o -name .*~ -o -name core ) -exec \rm '{}' \; この行をコメントアウトすると、エラーメッセージが停止しました。すべての一時ファイルを検索して削除するようです。ただし、「core」という単語が含まれるディレクトリを検索し、それらも削除しようとします。これはシステムのプリセットです。


4
SIGINTなどをトラップするときに終了コードを保持しますか?
trapたとえばhttp://linuxcommand.org/wss0160.php#trapで説明されているように使用してctrl-c(または類似のもの)をキャッチし、終了する前にクリーンアップすると、返される終了コードが変更されます。 これはおそらく現実の世界では違いはありません(たとえば、終了コードは移植可能ではなく、その上に、プロセスが終了したときのデフォルトの終了コードで説明されているように常に明確であるとは限らないためです)。それでも、本当にそれを防ぎ、代わりに中断されたスクリプトのデフォルトのエラーコードを返す方法はありませんか? 例(bashですが、私の質問はbash固有のものと見なすべきではありません): #!/bin/bash trap 'echo EXIT;' EXIT read -p 'If you ctrl-c me now my return code will be the default for SIGTERM. ' _ trap 'echo SIGINT; exit 1;' INT read -p 'If you ctrl-c me now my return code will be 1. ' _ 出力: $ ./test.sh …

4
プロセス置換を使用するときに、終了コードをキャプチャする/エラーを正しく処理するにはどうすればよいですか?
SOのQ&Aから取得した次のメソッドを使用して、ファイル名を解析して配列にするスクリプトがあります。 unset ARGS ARGID="1" while IFS= read -r -d $'\0' FILE; do ARGS[ARGID++]="$FILE" done < <(find "$@" -type f -name '*.txt' -print0) これはうまく機能し、あらゆる種類のファイル名のバリエーションを完全に処理します。ただし、存在しないファイルをスクリプトに渡すこともあります。例: $ findscript.sh existingfolder nonexistingfolder find: `nonexistingfile': No such file or directory ... 通常の状況では、スクリプトで終了コードをキャプチャし、次のようなRET=$?方法で終了コードを取得します。これは、上記のプロセス置換では機能しないようです。 このような場合の正しい手順は何ですか?リターンコードをキャプチャするにはどうすればよいですか?代替プロセスで何か問題が発生したかどうかを判断する他のより適切な方法はありますか?

3
バックグラウンドプロセスの信頼できるリターンコード
次のbashコードを想定してみましょう。 foo > logfile 2>&1 & foo_pid=$! while ps -p$foo_pid do ping -c 1 localhost done wait $foo_pid if [[ $? == 0 ]] then echo "foo success" fi $?の戻りコードではfooなく、の戻りコードが実際に含まれていると想定しても安全pingですか?その質問に対する答えが「あなたはそれを仮定することはできません」である場合。次に、このコードを変更して、$?常に戻りコードが含まれていることを確認するにはどうすればよいfooですか?

4
vforkまたはforkの子がexit()ではなく_exit()を呼び出す必要があるのはなぜですか?
のマニュアルページからvfork(): vfork()は、子がexecve(2)または_exit(2)を呼び出すまで親が一時停止されるという点でfork()とは異なります。子は、execve()が子によって発行されるまで、スタックを含むすべてのメモリを親と共有します。子は現在の関数から戻ったり、exit()を呼び出したりしてはなりませんが、_exit()を呼び出すことはできます。 なぜ子供が使用する必要があり_exit()、単純に呼び出すのではなくexit()?私は、これは両方に適用され願っていますvfork()とfork()。
12 c  system-calls  fork  exit 

3
端末ではなくbash関数を終了します
私はzookeeperをインストールする以下のbashスクリプトを持っていますが、まだインストールされていない場合のみです。 ##zookeper installZook(){ ZOOK_VERSION="3.4.5" ZOOK_TOOL="zookeeper-${ZOOK_VERSION}" ZOOK_DOWNLOAD_URL="http://www.us.apache.org/dist/zookeeper/${ZOOK_TOOL}/${ZOOK_TOOL}.tar.gz" if [ -e $DEFAULT_INSTALLATION_DEST/${ZOOK_TOOL} ]; then echo "${ZOOK_TOOL} alreay installed"; exit 1; # <<<< here elif [ ! -e $DEFAULT_SOURCE_ROOT/${ZOOK_TOOL}.tar.gz ]; then wgetIt $ZOOK_DOWNLOAD_URL else echo "[info] : $DEFAULT_SOURCE_ROOT/$ZOOK_TOOL already exists" fi sudo mkdir -p /var/lib/zookeeper sudo mkdir -p /var/log/zookeeper tarIt "$DEFAULT_SOURCE_ROOT/$ZOOK_TOOL.tar.gz" sudo chmod …

2
終了したバックグラウンドジョブステータスの「Exit 2」とは何ですか?
私はファイルにいくつかのデータ(いくつかのディレクトリからの* conf)を入れる演習を行っており、これをバックグラウンドで行う必要があります。私はそれをしました、そして私は出力メッセージの意味が何であるか疑問に思っています: [A@localhost tests]$ ls -ld /etc/*conf /usr/*conf > test1_6_conf.txt 2>&1 & Enterはこの行を上昇させます: [1] 2533 どういう意味ですか?他のEnterの後に、別のメッセージが表示されます [A@localhost tests]$ [1]+ Exit 2 ls --color=auto -ld /etc/*conf /usr/*conf > test1_6_conf.txt 2>&1 どういう意味ですか?「2番出口」とは? チェック結果を入力してください-問題はないようです。 [A@localhost tests]$ [A@localhost tests]$ ls -l test1_6_conf.txt -rw-rw-r--. 1 A A 2641 Nov 22 14:19 test1_6_conf.txt [A@localhost tests]$ CentOS …

4
ネストされたループでシェルスクリプトを終了する
ネストされたループを持つシェルスクリプトがありますが、「exit」は実際にはスクリプトを終了せず、現在のループのみを終了することがわかりました。特定のエラー条件でスクリプトを完全に終了する別の方法はありますか? 許容可能なエラーがあり、多くの書き換えが必要になるため、「set -e」を使用したくありません。 現在、私はkillを使用して手動でプロセスをkillしていますが、これを行うにはもっと良い方法があるはずです。
11 bash  shell  scripting  exit 

3
「X」をクリックするか「ctrl + d」を使用するだけでシェルを閉じるのは安全ですか?
「X」をクリックするか、suでrootとしてログインしているときに「ctrl + d」を使用してシェルを閉じるのは安全ですか、それとも「exit」と入力して閉じるのが安全ですか?(セキュリティに関して)何か違いはありますか、それとも同じであり、どのように使用しても問題ありませんか?

2
子プロセスが作成直後にexec()またはexit()を呼び出すときにvfork()が使用されるのはなぜですか?
オペレーティングシステムの概念とAPUEは言う vfork()を使用すると、親プロセスは一時停止され、子プロセスは親のアドレス空間を使用します。vfork()はコピーオンライトを使用しないため、子プロセスが親のアドレススペースのページを変更した場合、再開すると、変更されたページが親に表示されます。したがって、vfork()は、子プロセスが親のアドレス空間を変更しないように注意して使用する必要があります。 vfork()は、子プロセスが作成直後にexec()またはexit()を呼び出すときに使用することを目的としています。 最後の文をどのように理解できますか? vfork()呼び出しによって作成された子プロセスの場合、新しいプログラムをロードすることにより、親プロセスのアドレス空間を変更exec()しませんexec()か? vfork()呼び出しによって作成された子プロセスが、子を終了するときに親プロセスのアドレス空間を変更exit()しませ exit()んか? 私はLinuxを優先します。 ありがとう。
11 linux  process  exec  exit  vfork 

3
別のスクリプトのスクリプトを呼び出しますが、子がexitを呼び出した場合は親を終了しません
first.sh: #! /bin/ksh echo "prova" . ./second.sh echo "ho lanciato il secondo" . ./third.sh echo "ho lanciato il terzo" second.sh: echo "sono nel secondo script" dosomething1 exit $? 場合はsecond.sh検出状況とエラーして終了-9、first.sh常に終了します。子シェルが終了した場合、最初のシェルを終了しないようにするにはどうすればよいですか? 編集できませんsecond.sh。

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。私に何ができる?:)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.