실행 파일 이름으로 별칭을 만드는 방법

실행 파일 이름으로 별칭을 만드는 방법

내에서 다음 줄을 구현해 보았습니다 .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=valbash는 정규식으로 정의된 문자를 포함하는 별칭을 거부합니다.

[ \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 별칭

쉘 명령 언어에서 밑줄, 숫자, 이식 가능한 문자 집합의 문자로만 구성된 단어와 다음 문자 중 하나: !, %, ,, @.

구현에서는 별칭의 추가 문자를 확장자로 허용할 수 있습니다.

따라서 bashzsh(별명에 직접 사용할 수 있음 /)은 모두 표준 범위 내에 있습니다.

함수 이름의 슬래시 및 기타 흥미로운 문자

bash및 에서는 함수 이름에 zsha를 직접 사용할 수 있습니다./

$ /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

관련 정보