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

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

나는 종료를 호출할 때 이것이 로그아웃의 별칭이라는 것을 알고 있습니다. 가끔 재미로 세션을 종료해야 할 때 다음을 입력합니다 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이 종료되지 않도록 두 번째 셸을 먼저 시작했습니다. 이 작업을 수행하지 않고 다른 창에서 파일이 존재하는지 확인하면 동일한 결과가 나타납니다.

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

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

관련 정보