파이프로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이것은 먼저 "top"의 자식으로 실행되는 새로운 것을 시작합니다 . 그런 다음 exec ls해당 쉘을 교체하고 종료하십시오. 그러면 상위 셸이 다시 시작되므로 터미널이 멈추는 일이 발생하지 않습니다.

관련 정보