내 시스템에서 파일을 검색하려면 다음 명령을 사용합니다.
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
과 같은 일부 구현에서와 같이 현재 작업 디렉터리에 대한 표준(심볼릭 링크되지 않은) 경로를 가져오기 위해 ) 다음을 사용할 수 있습니다.pwd
POSIXLY_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" 대신 (현재 디렉터리에서 검색)을 사용하는 것이 더 좋습니다.