다음 스크립트를 확인하세요.
#!/bin/bash
if true;then
alias WeirdTest='uptime';shopt -s expand_aliases
WeirdTest
fi
WeirdTest
처음 WeirdTest
실행하면 "명령을 찾을 수 없습니다"라고 표시됩니다.
답변1
이는 bash의 한계입니다. 매뉴얼 인용 :
별칭의 정의 및 사용에 관한 규칙은 다소 혼란스럽습니다.
Bash는 명령을 읽을 때 별칭을 확장합니다. 이러한 의미에서 명령은 if … fi
완전한 명령(전체 블록은 복합 명령임)과 완전한 줄(따라서 … fi; WeirdTest
줄 바꿈을 추가하는 대신 그 뒤에 쓰면 fi
두 번째 발생 WierdTest
도 확장되지 않음)로 구성됩니다. 스크립트에서 if
명령을 읽을 때 WeirdTest
별칭은 아직 존재하지 않습니다.
가능한 해결책은 함수를 정의하는 것입니다.
if …; then
WeirdTest () { uptime; }
WeirdTest
fi
WeirdTest
동일한 이름의 외부 명령을 호출할 수 있도록 별칭을 사용하려면 command
함수 앞에 추가하면 됩니다.
WeirdTest () { command WeirdTest --extra-option "$@"; }