나는 인터넷에서 현재 사용자의 홈 디렉터리로 소프트웨어를 다운로드한 다음 압축을 푸는 스크립트를 작성했습니다. 그런 다음 일부 소프트웨어에서 실행해야 합니다 make
.make install
python setup.py install
문제는 이러한 모든 명령을 실행하기 위해 현재 디렉터리를 변경하고 싶지 않다는 것입니다.
명령에서 경로를 지정하는 방법이 있습니까? 예를 들면 다음과 같습니다.
python /home/username/Desktop/urllib/setup.py install
make /home/username/Desktop/somedir/
make install /home/username/Desktop/somedir/
답변1
쉘은 명령을 결합하는 도구입니다. 물론 cd
다른 디렉토리로 변경하는 명령을 이미 알고 있으므로 다른 명령과 함께 묶어두기 위한 접착제가 부족합니다.
실행하여 cd /some/dir && python foo.py
다른 디렉터리로 변경하고 명령을 한 번에 실행할 수 있습니다. cd /some/dir; python foo.py
세미콜론 대신 이중 앰퍼샌드를 사용하면 실패할 경우(예를 들어 디렉터리 이름을 잘못 입력하여) &&
명령이 실행되지 않는다는 장점이 있습니다. 이 방법으로 더 많은 명령을 연결할 수 있습니다.python
cd
cd /some/dir && python foo.py && make && make install
다른 디렉토리에서 실행하려는 명령을 미리 알고 있는 경우 cd
하나의 디렉토리에서 이러한 명령과 기타 명령을 실행할 수 있습니다.서브쉘: 괄호 안에 명령을 작성하면 기존 프로세스의 모든 상태(환경, 현재 디렉터리 등)를 상속하는 별도의 셸 프로세스에서 실행됩니다. 서브쉘이 종료되면(닫는 대괄호에서) 서브쉘 내의 변경사항에 영향을 받지 않고 원래 쉘이 재개됩니다.
(cd /some/dir && python foo.py && make && make install)
# back in the original directory
어떤 명령을 실행하고 싶은지 미리 알 수 없다면, cd
다른 명령을 실행하고 실행한 후 이전 디렉터리로 돌아가는 데 사용할 수 있습니다 cd -
.
cd /some/dir
python foo.py
make
make install
cd -
# back in the original directory
zsh를 쉘로 사용하지 않는 한 .back을 사용하여 한 번만 반환할 수 있습니다 cd -
. 더 뒤로 돌아가려면 pushd
및 명령을 사용하십시오 popd
. pushd /some/dir
와 유사 cd /some/dir
하지만 이전 디렉터리를 스택 상단에 추가로 추가합니다. popd
스택 맨 위에 저장된 디렉터리로 다시 변경하고 스택에서 해당 디렉터리를 제거합니다. 을 사용하여 스택된 디렉터리 목록을 볼 수 있고, 등을 사용하여 dirs
스택에 있는 디렉터리로 이동할 수 있습니다 pushd -1
.pushd -2
pushd /some/dir
python foo.py
make
make install
popd
# back in the original directory
일부 명령에는 다른 디렉터리에서 작업하도록 지시하는 옵션이 있습니다. 예를 들어 make -C /some/dir
, (cd /some/dir && make)
이것은 대부분 입력 단축키이거나 셸을 직접 사용할 수 없을 때 편리하며 일반적으로 cd
셸에서 언제든지 사용할 수 있습니다.
답변2
make
그 -C
옵션을 사용할 수 있기 때문입니다 . 또는 pushd
쉘 명령을 사용하여 적절한 디렉토리로 이동한 다음 popd
필요한 명령이 완료된 후.
답변3
이를 달성하기 위해 서브쉘을 사용할 수 있습니다. 이와 같이:
$ pwd ; ( cd /tmp ; pwd ; ) ; pwd
/home/user
/tmp
/home/user