Bash: 변수에 별칭 사용

Bash: 변수에 별칭 사용

저는 각 인수를 명령으로 실행하는 bash 스크립트를 작성하고 있습니다. 이는 my 의 명령에는 작동 PATH하지만 별칭에는 작동하지 않습니다. 별칭은 스크립트에서 직접 호출할 수 있지만 매개변수로 전달된 별칭은 호출할 수 없습니다.

문제는 별칭이 변수보다 먼저 확장된다는 것입니다. 변수에서 별칭을 실행하는 방법이 있나요?

예시 스크립트:

#!/bin/bash
# File: runall

shopt -s expand_aliases
source ~/.aliases

while (( "$#" )); do
    $1
    shift
done

runall "echo test"작동하지만 runall "myalias"제공runall: line 8: myalias: command not found

답변1

몇 가지 테스트를 거쳐 다음과 같은 결론에 도달했습니다.

  • -i별칭은 대화형 모드( shebang에 추가됨)에서만 작동합니다 .
  • 별칭은 해석된 소스(이 경우 변수)에서 오는 경우 평가되지 않습니다.
  • bash에 별칭을 사용하도록 지시할 수 있습니다 eval $1. 변수를 사용하여 생성된 모든 것은 eval위험하지만 스크립트의 전체 요점은 임의의 실행을 요구하므로 크게 다루지는 않을 것입니다.

Bash 매뉴얼 페이지에서:

셸이 비대화형인 경우, Shopt를 사용하여 Expand_aliases 셸 옵션을 설정하지 않으면 별칭은 확장되지 않습니다(아래 SHELL BUILTIN COMMANDS 아래의 shopt 설명 참조).

shopt -s expand_aliases따라서 대신 추가할 수 있습니다 -i.

반품,

별칭은 명령이 실행될 때가 아니라 명령을 읽을 때 확장됩니다.

변수는 명령을 읽을 때까지 확장되지 않으므로 별칭을 사용하여 더 이상 확장되지 않습니다.

답변2

비슷한 문제가 있었고 위에서 언급한 대로 별칭을 함수로 변환하여 문제를 해결했습니다.이 웹사이트, 이것은 나에게 효과적이었습니다.

예를 들어

alias lsd="ls -lash"

도착하다

function lsd() { ls -lash; }

관련 정보