find
"자동 모드"(모든 메시지 없이)로 실행할 수 있도록 별칭을 만드는 데 문제가 있습니다 Permission denied
. 내 bash 기술이 매우 열악하여 이 문제를 해결하는 방법을 모르겠습니다.
이것은 내 별칭입니다 ~/.bashrc
.
alias find='function _find(){find / -name "$1" 2>&1 | grep -v "Permission denied"}'
source ~/.bashrc
따라서 실행하면 sudo find "Exercism"
출력이 표시됩니다.find: ‘Exercism’: No such file or directory
그러나 실행하면 find / -name "Exercism" 2>&1 | grep -v "Permission denied"
올바른 결과가 생성됩니다.
find
매개변수를 별칭 함수에 올바르게 전달하는지 아니면 전혀 전달 하는지 잘 모르겠습니다 .
답변1
별칭은 해석되기 전에 쉘 코드에서 단어를 다른 텍스트로 바꾸는 것으로 생각하십시오.
별칭은 다음 find
과 같이 정의됩니다.
alias find='function _find(){find / -name "$1" 2>&1 | grep -v "Permission denied"}'
입력하는 대로
find
프롬프트에서 다음으로 대체됩니다.
function _find(){find / -name "$1" 2>&1 | grep -v "Permission denied"}
쉘이 인 경우 zsh
이 코드는 _find
본문이 인 함수를 정의합니다 find / -name "$1" 2>&1 | grep -v "Permission denied"
. 을 포함한 다른 셸에서는 변수 선언에 대한 올바른 구문이 아니거나 ( 또는 와 같은 ) 이것이 간단한 명령으로 처리되고 단순 명령을 지원하지 않는 유일한 셸이기 때문에 bash
구문 오류가 발생합니다. 함수 본문으로서의 명령.function f()
bash
yash
{find...
bash
yash
여기서 별칭이 아닌 함수를 정의하려고 하며 함수는 find
명령과 다른 API를 가지므로 내 것과 같은 다른 이름으로 호출해야 합니다.
myfind() {
find / -name "$@" 2>&1 | grep -v "Permission denied"
}
어쨌든 별칭이나 함수는 둘 다 셸의 내부 함수이므로 에서 호출할 수 없습니다 sudo
. sudo
호출하려면 스크립트와 같은 실제 명령을 만들어야 합니다.
#! /bin/sh -
find / -name "$@" 2>&1 | grep -v "Permission denied"
스크립트를 실행 가능하게 만들고 sudo
s secure_path
가 정의된 디렉터리에 저장해야 합니다.
답변2
alias find='function _find() { find / -name "$1" 2>&1 | grep -v ": Permission denied$"; } ; _find'
귀하의 별칭은 함수를 정의합니다. 함수를 정의하고 싶고불러라.