스크립트에서 현재 디렉토리를 변경할 수 있습니까?
Bash에서 디렉토리 탐색을위한 유틸리티를 만들고 싶습니다. 다음과 같은 테스트 스크립트를 작성했습니다.
#!/bin/bash
cd /home/artemb
Bash 쉘에서 스크립트를 실행할 때 현재 디렉토리는 변경되지 않습니다. 스크립트에서 현재 쉘 디렉토리를 변경할 수 있습니까?
스크립트에서 현재 디렉토리를 변경할 수 있습니까?
Bash에서 디렉토리 탐색을위한 유틸리티를 만들고 싶습니다. 다음과 같은 테스트 스크립트를 작성했습니다.
#!/bin/bash
cd /home/artemb
Bash 쉘에서 스크립트를 실행할 때 현재 디렉토리는 변경되지 않습니다. 스크립트에서 현재 쉘 디렉토리를 변경할 수 있습니까?
답변:
스크립트를 쉘 함수로 변환해야합니다.
#!/bin/bash
#
# this script should not be run directly,
# instead you need to source it from your .bashrc,
# by adding this line:
# . ~/bin/myprog.sh
#
function myprog() {
A=$1
B=$2
echo "aaa ${A} bbb ${B} ccc"
cd /proc
}
그 이유는 각 프로세스마다 고유 한 현재 디렉토리가 있고 쉘에서 프로그램을 실행할 때 새 프로세스에서 실행되기 때문입니다. 표준 "cd", "pushd"및 "popd"는 쉘 인터프리터에 내장되어있어 쉘 프로세스에 영향을줍니다.
프로그램을 쉘 기능으로 만들어서 자체적 인 in-process 명령을 추가하면 디렉토리 변경 사항이 쉘 프로세스에 반영됩니다.
스크립트를 시작하면 환경 만 상속하는 새 프로세스가 작성됩니다. 끝나면 끝납니다. 현재 환경은 그대로 유지됩니다.
대신 다음과 같이 스크립트를 시작할 수 있습니다.
. myscript.sh
는 .
이 변경 될 수 있으므로, 현재의 환경에서 스크립트를 평가합니다
.sh
확장은 완전히 eww입니다. 사용하지 마십시오.
위의 내용을 정리하면 별칭을 만들 수 있습니다
alias your_cmd=". your_cmd"
선행 "."을 쓰지 않으려면 스크립트를 쉘 환경에 소스를 제공하거나 스크립트가 올바르게 작동하기 위해 수행해야하는 것을 기억하고 싶지 않을 때마다.
~/.bash_aliases
Bash가 시작될 때 @Champ 가 항상 소스되지는 않습니다.
bash 스크립트를 실행하면 현재 환경이나 자식 환경에서 작동하며 부모 환경에서는 작동하지 않습니다.
목표가 명령을 실행하는 것이라면 : goto.sh / home / test 그런 다음 / home / test에서 대화식으로 작업하는 방법 중 하나는 스크립트 내에서 bash 대화식 서브 쉘을 실행하는 것입니다.
#!/bin/bash
cd $1
exec bash
이렇게하면이 쉘의 종료 (exit 또는 Ctrl + C)까지 / home / test에있게됩니다.
디렉토리를 변경하는 스크립트를 만들었습니다. 살펴보십시오 : https://github.com/ygpark/dj
기본적으로 우리 cd..
는 모든 디렉토리에서 돌아 오는 데 사용 합니다. 한 번에 돌아와야 할 디렉토리 수를 제공하여 더 쉽게 만들려고 생각했습니다. alias 명령을 사용하여 별도의 스크립트 파일을 사용하여이를 구현할 수 있습니다. 예를 들면 다음과 같습니다.
code.sh
#!/bin/sh
_backfunc(){
if [ "$1" -eq 1 ]; then
cd ..
elif [ "$1" -eq 2 ]; then
cd ../..
elif [ "$1" -eq 3 ]; then
cd ../../..
elif [ "$1" -eq 4 ]; then
cd ../../../..
elif ["$1" -eq 10]; then
cd /home/arun/Documents/work
fi
}
alias back='_backfunc'
source code.sh
현재 쉘에서 사용한 후 다음을 사용할 수 있습니다.
$back 2
현재 디렉토리에서 두 단계 뒤로 이동합니다. 여기 에 자세히 설명되어 있습니다 . ~ / .bashrc에 코드를 넣는 방법도 설명되어 있으므로 열려있는 모든 새 쉘에이 새 별칭 명령이 자동으로 적용됩니다. 더 많은 if conditions
인수를 추가하여 코드를 수정하여 특정 디렉토리로 이동하는 새 명령을 추가 할 수 있습니다 . 여기 git에서 코드를 가져올 수도 있습니다 .
또한 쉽게 탐색 할 수 있도록 염소 라는 유틸리티를 만들었습니다 .
GitHub 에서 소스 코드를 볼 수 있습니다 .
# Create a link (h4xdir) to a directory:
goat h4xdir ~/Documents/dev
# Follow a link to change a directory:
cd h4xdir
# Follow a link (and don't stop there!):
cd h4xdir/awesome-project
# Go up the filesystem tree with '...' (same as `cd ../../`):
cd ...
# List all your links:
goat list
# Delete a link (or more):
goat delete h4xdir lojban
# Delete all the links which point to directories with the given prefix:
goat deleteprefix $HOME/Documents
# Delete all saved links:
goat nuke
# Delete broken links:
goat fix
pushd
하기>/dev/null
위해 리디렉션 됨 )을 사용cd
하면 나중에로 이전 디렉토리로 돌아갈 수 있습니다popd
.