별칭에 "pwd"를 사용하려고 하면 예상치 못한 결과가 발생합니다.

별칭에 "pwd"를 사용하려고 하면 예상치 못한 결과가 발생합니다.

내 시스템에서 파일을 검색하려면 다음 명령을 사용합니다.

sudo find `pwd` -name filename.ext

this 와 같이 더 간단한 단어에 대한 별칭을 만들고 싶었 search기 때문에 다음 명령을 사용했습니다.

alias search "find `pwd` -name "

문제는 명령이 pwd해당 섹션을 현재 내가 있는 실제 경로로 변환한다는 것입니다. alias별칭 목록을 보기 위해 입력하면 다음과 같은 내용이 표시됩니다.

search   find /path/to/my/homedir -name

이것을 어떻게 피할 수 있습니까?

답변1

정의 시 쉘 확장을 방지하려면 작은따옴표를 사용하세요.

alias search='find `pwd` -name '

답변2

명령을 다음과 같이 수정합니다.

alias search="find . -name "

그래서 항상 그럴 것이다찾다현재 디렉터리, 즉 현재 작업 디렉터리에서만

답변3

명령 대체는 Bourne과 같은 쉘에서와 마찬가지로 (t)csh(사용 중인 것으로 보이는)에서 큰따옴표로 확장됩니다.

그래서:

alias search "find `pwd` -name "

실제로 다음과 같은 작업을 수행하고 있습니다.

alias search 'find /some/dir -name '

이 명령이 실행될 /some/dir때 현재 디렉토리는 어디입니까 ?alias

원하는 곳은 다음과 같습니다.

alias search 'find $cwd:q -name'

$cwd자동으로 설정되므로 tcsh( $PWD최신 버전(예: POSIX 셸)에서도) 효율성이 낮고 신뢰성이 떨어지는 대신 사용할 수 있습니다 `pwd`.

내부적으로 확장되지 않도록 작은(강한) 따옴표를 사용합니다 $cwd.

$cwd:q변수 값을 분할하는 대신 매개변수로 전달합니다.

또한 위 항목 뒤에는 공백이 필요하지 않습니다 -name.

사용하려는 경우 (예를 들어 환경에 없는 GNU 구현 pwd과 같은 일부 구현에서와 같이 현재 작업 디렉터리에 대한 표준(심볼릭 링크되지 않은) 경로를 가져오기 위해 ) 다음을 사용할 수 있습니다.pwdPOSIXLY_CORRECT

alias search 'find "`pwd`" -name'

그러나 현재 디렉터리의 경로에 개행 문자가 포함되어 있으면 이 방법은 작동하지 않습니다.

sudo search별칭은 (t)csh의 명령 위치에서만 확장되므로 별칭을 사용할 수 없습니다 . POSIX 셸에서는 다음을 수행할 수 있습니다.

alias sudo='sudo '

다음 단어도 별칭 확장되어야 한다고 쉘에 지시 sudo하지만 이 트릭은 (t)csh에서는 작동하지 않습니다.

POSIX sh(또는 bash/ zsh/ ksh...)에 해당하는 것은 다음과 같습니다:

alias search='find "$PWD" -name'

답변4

alias호출되면 평가됩니다. 별칭을 호출할 때 명령을 호출하는 옵션이 없습니다. 하위 명령을 실행할 수 있는 bash 함수를 작성해야 합니다. 또는 . "pwd" 대신 (현재 디렉터리에서 검색)을 사용하는 것이 더 좋습니다.

관련 정보