Exit를 호출한 후 Bash에서는 어떤 일이 발생하나요?

Exit를 호출한 후 Bash에서는 어떤 일이 발생하나요?

나는 종료를 호출할 때 이것이 로그아웃의 별칭이라는 것을 알고 있습니다. 때로는 재미로 세션에서 자신을 제거해야 할 때 를 입력합니다 exit && 1. 이제 exit실행된 후에는 어떤 일이 발생합니까? 어디로 가나요 1? bash에 1을 입력하면 (분명히) 다음과 같은 결과가 나옵니다 1: command not found. 왜 1이 작동하지 않는지 묻지 않습니다. Exit를 호출한 후 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이 종료되지 않도록 먼저 두 번째 셸을 시작했습니다. 그렇게 하지 않고 다른 창에서 파일 존재 여부를 확인해도 동일한 결과가 나타납니다.

cmd1 && cmd2실행을 의미하며 cmd1, 성공하면(종료 코드 = 0) 실행합니다 cmd2. 따라서 먼저 쉘이 실행됩니다 exit. 종료하면 쉘이 더 이상 존재하지 않으므로 "성공한 경우" 부분에 도달하지 않습니다.

구문 오류에 대한 후속 조치가 다릅니다. 입력 줄이 다음과 같을 때 구문을 확인합니다.파싱된, 일부가 실행되기 전에. 기본적으로 bash는 사용자가 의미하는 바를 전혀 이해하지 못하므로 실행을 시작할 수 없습니다.

관련 정보