쉘 스크립트에서 Pushd 호출

쉘 스크립트에서 Pushd 호출

"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

관련 정보