파이프로exec

파이프로exec

나는 에 익숙하지 않습니다 exec. 나는 몇 가지 테스트와 예제를 실행하고 있었습니다. 파일에 작성된 명령을 전달하고 싶었습니다. 나는 그 명령이 exec마치 명령줄에서 직접 실행되는 것처럼 실행될 것으로 기대하고 있습니다 . 제가 설정하고 시도한 내용은 다음과 같습니다.

[kellyry@ch12ldvela00 ~]$ cat exec_test
ls
[kellyry@ch12ldvela00 ~]$ cat exec_test | exec
[kellyry@ch12ldvela00 ~]$ cat exec_test | xargs exec
xargs: exec: No such file or directory
[kellyry@ch12ldvela00 ~]$ exec ls
exec_test            file2             file3
. . .          

가장 이상한 부분은 다음과 같습니다. 마지막 줄을 실행해도 exec ls반환되지 않습니다. 터미널이 정지되어 통신할 수 없습니다. 나는 이 마지막 문제가 서버에 SSH로 연결하는 데 사용하는 Mobaxterm의 문제일 수 있다고 생각합니다.

답변1

맨페이지 에서 bash:

exec [-cl] [-a name] [command [arguments]]

가 지정 되면 command쉘을 대체합니다. 새로운 프로세스가 생성되지 않습니다.

[...]

지정하지 않으면 command모든 리디렉션이 현재 셸에 적용되고 반환 상태는 0입니다.

파이프로exec

가장 먼저 시도한 것은

cat exec_test | exec

이는 인수가 아닌 표준 입력으로 전송 ls됩니다 . 인수 없이 실행되고 리디렉션도 없으므로 아무 작업도 수행하지 않습니다.execexec

파일의 명령을 실행(또는 "실행")하려는 경우에는 해당되지 않습니다 exec. source(또는 약어 )를 사용하여 이를 수행할 수 있습니다 ..

source exec_test

파이프로xargs exec

다음으로 시도한 것은

cat exec_test | xargs exec

exec배쉬다내장. bash 내에서만 사용할 수 있으므로 xargs실행할 수 없습니다.

exec메인 쉘에서

마침내 당신은 노력했습니다

exec ls

이것은 실행된 ls다음 터미널을 중단했습니다. 그 이유는 문서에 나와 있듯이 셸 프로세스를 대체했기 때문입니다. 완료 되면 ls더 이상 터미널에서 실행되는 것이 없습니다. (일부 터미널 에뮬레이터는 이 시점에서 자동으로 닫힙니다. 다행히도 닫히지 않았으므로 계속 출력을 볼 수 있습니다.)

그만큼당신이 따르려고 했던 예추가 단계가 있었습니다:

bash
exec ls

bash이것은 먼저 "최상위" 항목의 하위 항목으로 실행되는 새 를 시작합니다 . 그런 exec ls다음 해당 쉘을 대체하고 종료됩니다. 그런 다음 상위 셸이 다시 시작되므로 터미널이 중단되지 않습니다.

관련 정보