私はシャットダウンを呼び出すときにこれがログアウトのエイリアスであることを知っています。時々楽しんでセッションを終了する必要がある場合は、次のように入力しますexit && 1
。それではexit
、実行後に何が起こりますか?どこに行きましたか1
? Bashに1を入力すると(明らかに)、次のようになります1: command not found
。なぜ1が機能しないのか尋ねません。私が尋ねたいのは、1が終了を呼び出した後にどこに行くのかです。 1は単なる例なので、別の命令に置き換えてください。
ただし、入力するとexit &&&&&&& 1
構文エラーが発生します。だから右手を評価する必要があります。
婦人声明:これは私が興味を持っている質問です。この質問は何が起こっているのか疑問に思う以外に特別な理由はありません。
答え1
と入力すると、exit
シェルは1
評価なしですぐに終了します。ソースコードを確認してみると出口、あなたは見ることができます:
int
exit_builtin (list)
WORD_LIST *list;
{
if (interactive)
{
fprintf (stderr, login_shell ? _("logout\n") : "exit\n");
fflush (stderr);
}
return (exit_or_logout (list));
}
最後のものは次exit
のとおりです。return (exit_or_logout (list))
static int
exit_or_logout (list)
WORD_LIST *list;
{
int exit_value;
..............
/* Get return value if present. This means that you can type
`logout 5' to a shell, and it returns 5. */
/* If we're running the exit trap (running_trap == 1, since running_trap
gets set to SIG+1), and we don't have a argument given to `exit'
(list == 0), use the exit status we saved before running the trap
commands (trap_saved_exit_value). */
exit_value = (running_trap == 1 && list == 0) ? trap_saved_exit_value : get_exitstat (list);
bash_logout ();
last_command_exit_value = exit_value;
/* Exit the program. */
jump_to_top_level (EXITPROG);
/*NOTREACHED*/
}
exit &&&&&&& 1
評価された式の結果ではなく、解析エラーによる構文エラーです。解析は、コマンドが実行される前に発生します。
答え2
シェルが終了するため実行されません。簡単なテスト方法は次のとおりです。
$ bash
$ touch /tmp/testfile
$ exit && rm /tmp/testfile
exit
$ ls /tmp/testfile
/tmp/testfile
XTermが終了しないように、2番目のシェルを最初に起動しました。これを行わずに別のウィンドウにファイルが存在することを確認すると、同じ結果が表示されます。
cmd1 && cmd2
実行を意味しcmd1
、成功した場合(終了コード= 0)実行しますcmd2
。したがって、まずシェルが実行されますexit
。終了すると、シェルはもう存在しないため、「成功した場合」部分に到達しません。
構文エラーのフォローアップが異なります。行を入力するときに構文を確認してください。F、その一部を実行する前に。デフォルトでは、bashはユーザーが意味するものを理解していないため、実行を開始できません。