내가 이 별칭을 가지고 있다고 가정해 봅시다..bashrc
alias somedir="cd /var/www/site"
somedir
... 명령을 어떻게 사용합니까 cd
?
예를 들어
cd somedir/app/
현재 이렇게 하면 다음이 반환됩니다.
-bash: cd: somedir/app: 해당 파일이나 디렉터리가 없습니다.
이런 식으로 별칭을 사용할 수 있습니까?
답변1
셸에는 별칭 없이 이 작업을 수행하는 데 도움이 되는 셸 변수가 bash
있습니다 .CDPATH
$ CDPATH=".:/var/www/site"
$ cd app
/var/www/site/app
app
이름이 하위 디렉터리 인 경우 doc
:
$ cd app/doc
/var/www/site/app/doc
CDPATH
값 이 이면 .:/var/www/site
명령은 cd
먼저 현재 디렉토리에서 명령줄에 제공된 디렉토리 경로를 찾고, 찾을 수 없으면 아래를 찾습니다 /var/www/site
.
bash
매뉴얼 에서 :
CDPATH
명령에 대한 검색 경로입니다
cd
. 이는 쉘이 명령에 의해 지정된 대상 디렉토리를 찾는 콜론으로 구분된 디렉토리 목록입니다cd
. 샘플 값은 입니다".:~:/usr"
.
CDPATH
일반적으로 이 변수가 bash
대화형 세션에서 실행되는 스크립트에 영향을 주지 않기를 원하므로 이 변수를 내보내면 안 됩니다 .
답변2
인용하다편리한 Bash 참조(강조):
Bash 별칭은 본질적으로 키보드 단축키, 약어 및 긴 명령 시퀀스 입력을 방지하는 방법에 지나지 않습니다. ...별칭이 C 전처리기의 일부 기능(예: 매크로 확장)을 사용할 수 있다면 좋겠지만 불행하게도 Bash는 별칭 본문 내에서 인수를 확장하지 않습니다. 또한 스크립트는 if/then 문, 루프 및 함수와 같은 "복합 구조" 내에서 별칭 자체를 확장할 수 없습니다. 또 다른 제한 사항은 별칭이 재귀적으로 확장되지 않는다는 것입니다.거의 항상 별칭으로 수행하려는 작업은 함수를 사용하여 더 효율적으로 수행할 수 있습니다.
귀하의 상황은 독특하지만 CDPATH
,코살라 난다(Kosala Nanda)가 대답했듯이, 해당 기능은 다음과 같습니다.
somedir() {
cd /var/www/site/"${1:-}"
}
이제 다음을 수행할 수 있습니다.
$ pwd
/tmp
$ somedir
$ pwd
/var/www/site
$ somedir app
$ pwd
/var/www/site/app