찾기 기능의 별칭을 지정하고 이를 sudo와 함께 사용합니다.

찾기 기능의 별칭을 지정하고 이를 sudo와 함께 사용합니다.

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()bashyash{find...bashyash

여기서 별칭이 아닌 함수를 정의하려고 하며 함수는 find명령과 다른 API를 가지므로 내 것과 같은 다른 이름으로 호출해야 합니다.

myfind() {
  find / -name "$@" 2>&1 | grep -v "Permission denied"
}

어쨌든 별칭이나 함수는 둘 다 셸의 내부 함수이므로 에서 호출할 수 없습니다 sudo. sudo호출하려면 스크립트와 같은 실제 명령을 만들어야 합니다.

#! /bin/sh -
find / -name "$@" 2>&1 | grep -v "Permission denied"

스크립트를 실행 가능하게 만들고 sudos secure_path가 정의된 디렉터리에 저장해야 합니다.

답변2

alias find='function _find() { find / -name "$1" 2>&1 | grep -v ": Permission denied$"; } ; _find'

귀하의 별칭은 함수를 정의합니다. 함수를 정의하고 싶고불러라.

관련 정보