내에서 다음 줄을 구현해 보았습니다 .bashrc
.
alias ./my_exec='printf "foo"'
그러나 별칭은 작동하지 않으며 다음 줄이 나타납니다.
bash: alias: `./my_exec': invalid alias name
나는 zsh
터미널이 그 일을 할 수 있다는 것을 알고 있지만 단지 터미널 때문에 터미널로 전환하지는 않을 것입니다.
이 별칭을 작동시킬 수 있는 방법이 있나요?
답변1
Bash-4.x에서
$ BASH_ALIASES[./my_exec]='echo yes'
$ ./my_exec
yes
배쉬에 따르면맨페이지/
, 별칭에는 사용할 수 없습니다 .
그 역할
/
,$
및 위에 나열된 셸 메타 문자나 인용 문자`
는=
별칭에 표시되어서는 안 됩니다.
구문을 통해 별칭을 정의할 때 alias name=val
bash는 정규식으로 정의된 문자를 포함하는 별칭을 거부합니다.
[ \t\n&();<>|\\"'`$/]
보다legal_alias_name()
소스 코드에서 함수를 작동합니다. 위 의 내용이 없다는 것은 =
누락이 아닙니다. 별칭에 사용할 수 없다는 것은 단순히 구문의 문제입니다.
하지만 당신은할 수 있는별칭에 다음 문자 중 일부를 사용하여 배열을 통해 간접적으로 별칭을 정의합니다 BASH_ALIASES
.
$ BASH_ALIASES['/a=$']='echo yes'; /a=$
yes
이것은"안정적인"bash-5.0에서/
더 이상 별칭으로 사용할 수 없습니다 . 그러나 편의를 위해 다음을 계속 사용할 수 있습니다 =
.
bash-5.0-18-g36f2c406$ BASH_ALIASES[ef=g]='echo yess'
bash-5.0-18-g36f2c406$ ef=g
yess
bash-5.0-18-g36f2c406$ echo $ef
<nothing>
susv4의 별칭기준
3.10 별칭
쉘 명령 언어에서 밑줄, 숫자, 이식 가능한 문자 집합의 문자로만 구성된 단어와 다음 문자 중 하나:
!
,%
,,
,@
.
구현에서는 별칭의 추가 문자를 확장자로 허용할 수 있습니다.
따라서 bash
및 zsh
(별명에 직접 사용할 수 있음 /
)은 모두 표준 범위 내에 있습니다.
함수 이름의 슬래시 및 기타 흥미로운 문자
bash
및 에서는 함수 이름에 zsh
a를 직접 사용할 수 있습니다./
$ /bin/sh(){ echo no /bin/sh today; }
$ /bin/sh -c ls
no /bin/sh today
이것은 이식할 수 없는 확장입니다. 표준 쉘은 지원만 하면 됩니다.기능 이름포함하는ASCII 문자, 숫자, 밑줄을 사용할 수 있으며 숫자로 시작하지 않습니다..
에서 bash
함수 이름은 $
숫자만 포함하지 않고 함수 정의 구문에 의해 부과된 제약 조건 내에 있는 경우를 제외한 모든 문자로 구성될 수 있습니다. 당신은 볼 수 있습니다execute_intern_function()
그리고check_identifier()
모든 세부정보를 확인하세요.
zsh
전체 숫자 제약 조건이 적용되지 않는 정의에서는 함수 이름을 인용/이스케이프할 수도 있습니다 .
zsh$ 666() echo "$0"; \$() echo "$0"
zsh$ 666; $
666
$
답변2
어쩌면 기능이 필요할 수도 있습니다.
my_exec(){
print "foo"
}
이것은 나를 위해 찾았습니다.
countryip(){
COUNTY="$(whois $1 | grep ountry))"
echo "$COUNTRY $1 \n"
}
$ countryip 192.168.0.1