bash 스크립트에서 쉘 디렉토리를 변경할 수 있지만 서브 쉘뿐만 아니라 디렉토리 변경 사항을 유지하는 것이 가능한지 궁금합니다.
cd
bash 스크립트 내에서 실행하면 디렉터리는 하위 쉘 내에서만 변경되고 종료하면 원래 있던 디렉터리로 돌아간다는 것을 알고 있습니다 .
그러나 특정 디렉터리로 이동하는 명령을 실행하고 싶습니다. 별칭을 사용할 수 있지만 별칭을 만들어야 하는 하위 디렉터리가 많이 있습니다.
답변1
아니요, 스크립트는 별도의 셸에서 실행되며 이는 상위 항목에 영향을 주지 않습니다. 그러나 매개변수와 함께 함수를 사용할 수 있으므로 별칭보다 더 유연합니다. 또 다른 옵션은 source
또는 그에 상응하는 를 사용하여 파일을 가져오는 것 입니다 .
. 그러나 이는 인수를 허용하지 않습니다. 그래도 현재 쉘에는 영향을 미칩니다. 이 두 기능을 결합하여 가져오려는 파일에 기능을 넣은 다음 현재 프로세스에서 이 기능을 사용할 수 있습니다.
답변2
CDPATH
아마도 쉘 변수와 같은 것을 찾고 있을 것입니다 .
변수는 명령 CDPATH
처럼 작동합니다 .PATH
cd
설정은 다음과 비슷합니다
CDPATH=".:~:~/projects:~/music"
당신이 말하게 만들 것입니다
cd ricky_martin
어느 곳에서든, 어딘가(아마도 )라는 이름의 하위 디렉터리 를 찾을 때까지 값 :
에서 -로 구분된 디렉터리 경로를 순차적으로 순회한 다음 거기에서 검색합니다.$CDPATH
ricky_martin
~/music/ricky_martin
cd
비슷하게
cd world_domination
~/projects/world_domination
그러한 하위 디렉토리가 있는 경우 해당 디렉토리로 이동될 수 있습니다. 현재 디렉터리에도 존재하는 경우 해당 디렉터리가 더 일찍 나타나므로 (첫 번째 위치의 점이) world_domination
먼저 선택됩니다 .$CDPATH
하는 일도 허용될 것이다
cd proj1/tests
~/projects/proj1/tests
그러한 디렉터리가 어디에나 존재하는지 여부를 가져옵니다( 현재 디렉터리나 홈 디렉터리에 존재하지 $CDPATH
않는 한 위의 값을 사용).proj/tests
CDPATH
일부 스크립트에 심각한 혼란을 줄 수 있으므로 쉘 변수를 내보내면 안 됩니다 .
이 변수는 설명서( ) CDPATH
에 설명되어 있습니다 .bash
man bash
CDPATH
명령에 대한 검색 경로입니다
cd
. 이는 쉘이 명령에 의해 지정된 대상 디렉토리를 찾는 콜론으로 구분된 디렉토리 목록입니다cd
. 샘플 값은 입니다".:~:/usr"
.