명령이 평소대로 실행되지만 실행 전에 매개변수에 대한 추가 작업도 수행할 수 있도록 명령에 별칭을 지정하고 싶을 수도 있습니다. 예를 들면 다음과 같습니다.
alias ls="echo displaying contents of $@; ls $@"
단지 가설일 뿐이지만 본질적으로 명령(이 경우 ls)을 실행하고 ls
기준이 발생하기 전에 이를 실행할 정적 명령 세트를 설정하고 싶습니다.
다음과 같은 함수:
function ls() {
echo "printing $1"
ls $1
}
문제의 명령에 사용된 스위치/옵션을 처리해야 하기 때문에 부적절해 보입니다. 즉, 전체 명령을 다시 생성해야 합니다.
추신. 원래 명령을 일반적인 방식으로 사용하고 별칭이나 rc(즉, 영구적으로 연결할 수 있는 것)를 사용하여 위의 방식으로 기능을 추가하고 싶습니다.
답변1
"$@"
다음을 사용하여 모든 함수 매개변수를 있는 그대로 실제 명령에 전달할 수 있습니다 .
$ verbose_ls() { echo "running ls with args '$@'"; \ls "$@"; }
$ alias ls=verbose_ls
$ ls -l -a /
running ls with args '-l -a /'
...
함수에서 \
앞의 백슬래시를 참고하세요. 이렇게 하면 재귀적으로 정의된 별칭 대신 호출하려고 하므로 별칭이 확장되는 것을 ls
방지할 수 있습니다 .bash
ls
/bin/ls
임의의 옵션 스위치를 실제 명령에 전달하는 기능을 유지하면서 실제로 함수 내의 특정 매개 변수에 액세스하려는 경우 함수 자체에 일종의 매개 변수 구문 분석 논리를 구현하는 것을 피할 수 없습니다.
답변2
별칭을 사용하면 이 작업을 수행할 수 없습니다.http://mywiki.wooledge.org/BashFAQ/080
답변3
당신은 그것을 사용할 수 있습니다 :
ls() {
echo "printing ${1}"
command ls "${1}"
}