
아래와 같이 디렉터리를 A 경로에서 B 경로로 변경하려고 합니다.
pwd|awk '{if($1=="/") cd /tmp/}'
awk: syntax error near line 1
awk: illegal statement near line 1
제안해주세요
답변1
system()
in을 사용하여 모든 명령을 실행할 수 있지만 awk
하위 쉘에서 명령을 실행하기 때문에 디렉토리를 변경하는 데 사용할 수 없습니다. 따라서 하위 쉘에서 디렉토리를 변경하면 하위 쉘이 즉시 종료됩니다. 명령은 다음과 같습니다.
pwd|awk '$0 == "/"{system("cd /tmp")}'
하지만 내가 말했듯이 이것은 작동하지 않습니다. 명령 앞에 다음을 추가 하면 echo
예상한 대로 실제로 실행되는 것을 볼 수 있습니다 .
$ cd /
$ pwd|awk '$0 == "/"{system("echo cd /tmp")}'
cd /tmp
$ cd /home
$ pwd|awk '$0 == "/"{system("echo cd /tmp")}'
나는 그냥 사용하고 if
선언하는 것이 더 낫다고 생각합니다.
if [ "${PWD}" = '/' ];then
cd /tmp
fi
답변2
cd
내부에서 호출하는 awk
것은 가능하지만( 명령을 호출 system()
하지 않고 사용 ) 많은 작업을 수행하지는 않습니다. 특히, 시작된 쉘의 현재 작업 디렉토리는 변경되지 않습니다 . 작업 디렉터리는 환경에 대해 로컬이며 다른 프로세스나 하위 셸은 상위 프로세스에서 상속된 자체 환경에서 실행됩니다(그리고 상위 프로세스의 환경은 하위 프로세스에서 변경할 수 없습니다).awk
cd
awk
awk
cd
현재 디렉터리가 루트인지, 루트 디렉터리 인지 확인하려면 /tmp
셸에서 직접 다음을 수행할 수 있습니다.
[ "$PWD" = "/" ] && cd /tmp