아래 명령은 출력을 제공하고 터미널을 종료합니다.
exec sleep 60
exec pwd
다음 명령은 오류를 발생시킵니다. 실행 동작에 대한 제안을 제공해 주세요.
$ exec test1.sh
-bash: exec: test1.sh: not found
$ exec cd /home/
-bash: exec: cd: not found
답변1
test1.sh
경로에 없을 가능성이 높습니다.test1.sh
현재 디렉터리에 있는 경우 다음을 사용합니다.exec ./test1.sh
그렇지 않으면 전체 경로를 지정하거나 명령을 에 배치하십시오
$PATH
.cd
은 내장 셸이며 시스템에서 사용할 수 있는 이 유틸리티의 외부 변형이 없습니다.내장 명령이 아닌 외부 명령으로 대체하도록 셸에만 요청할 수 있습니다. 전혀 모른다무엇대신 시도해 보세요어떻게누구나 시도해 보았지만 뭐라고 말할 수 있을지 모르겠습니다.
예를 들어 중간 셸에서 이중 실행을 수행할 수 있습니다.
exec sh -c 'cd /home && exec sleep 60'
이렇게 하면 추가 쉘을 남기지 않고
sleep
현재 작업 디렉토리가 변경된 상태로 명령이 실행 됩니다 ./home
답변2
실제로 질문하지 않으셨기 때문에 확실하지 않습니다."터미널을 나가세요""도 문제다다음 명령은 오류를 발생시킵니다".
다른 사람들은 실행하려고 하면 test1.sh
오류가 발생하는 이유를 설명했지만 완전성을 위해 여기서 다시 반복하겠습니다. 이는 검색 경로( $PATH
변수)에 의도적으로 현재 디렉터리가 포함되지 않기 때문입니다. 그 안에 없는 것을 실행하려면 $PATH
최소한 하나의 디렉터리 구분 기호를 포함해야 합니다. 현재 디렉토리에 있는 항목에 대한 가장 짧은 해결책은 이름 앞에 ./
;를 붙이는 것입니다. ( 예 ./test1.sh
를 들어 절대 경로를 사용할 수도 있지만 /home/myusername/test1.sh
더 많은 입력이 필요합니다.)
더 중요한 것은,exec
제 생각에는 애플리케이션을 실행하는 데 필요한 기대치가 있는 것 같습니다 .그러나 실제로는 그렇지 않습니다.사실, 이 동사가 한동안 존재한다는 사실을 잊어버리시기 바랍니다.*를 절대 사용하지 마세요exec
.
명령을 실행하는 데만 사용하세요. 따라서 첫 번째 예제 세트에서는 다음과 같이 작성하면 됩니다.
sleep 60
pwd
그리고 두 번째 세트에서는
./test1.sh
cd /home
* 적어도 exec
왜 필요한지 이해할 때까지우연한이 권장사항에 대한 예외입니다.