"push"를 호출한 다음 다른 명령을 호출하려는 간단한 스크립트가 있습니다. 하지만 스크립트의 "pushd" 명령은 스크립트 범위를 벗어나지 않는 것 같습니다.
쉘 터미널에서 실행되도록 하는 방법이 있습니까?
#!/bin/sh
pushd $1
time
내가 정말로 이루고 싶은 것은 전화를 걸고 명령을 사용하는 pushd
것 입니다.other-command
답변1
/bin/sh
이 경우 쉘 스크립트는 일반적으로 쉘 프로그램의 별도 인스턴스에서 실행됩니다. 귀하의 pushd
명령은 하위 쉘의 작업 디렉토리에만 영향을 미칩니다. 그렇지 않으면 쉘에서 실행되는 모든 프로그램이 쉘의 작업 디렉토리를 방해할 수 있습니다.
대신 현재 셸에서 스크립트를 실행하려면 다음을 수행하세요.
$ . my-command somedir
또는 더 자세히 설명하면 다음과 같습니다.
$ source my-command somedir
프로그램이 다른 프로그램처럼 작동하도록 하려면 별칭을 사용할 수 있습니다.
$ alias mycmd='source my-command'
$ mycmd /bin
$ pwd
/bin
답변2
스크립트는 상위 프로세스의 환경을 변경할 수 없습니다. 따라서 스크립트에서 변경한 모든 환경은 손실됩니다.
동일한 프로세스에서 스크립트를 실행하려면 다음과 같이 스크립트를 "가져올" 수 있습니다.
. /path/to/script.sh args
답변3
특히 Pushd를 사용할 때는 함수가 쉘 스크립트보다 더 적합합니다.
다음 항목에 추가하세요 .bashrc
.
foo() {
pushd $1
time
}
export foo
셸에서:
$ foo mydir1
산출:
~/mydir1 ~
real 0m0.000s
user 0m0.000s
sys 0m0.000s