yummy.sh 스크립트가 있습니다
#!/bin/bash
alias yumy='yum install -y '
yumprovision() {
yumy
}
이 스크립트를 실행하면 다음과 같은 결과가 나타납니다.
bash: yumy: command not found
함수에 별칭을 로드하지 않는 이유는 무엇입니까?
답변1
다음 기능을 사용할 수도 있습니다 yumy
.
#!/bin/bash
yumy() {
yum install -y "$@"
}
yumprovision() {
yumy
}
"$@"
이 함수의 매개변수로 확장되므로 yumy foo bar
와 동일합니다 yum install -y foo bar
.
기본적으로 Bash는 비대화형 쉘에서 별칭을 확장하지 않지만 shopt expand_aliases
다음과 같은 경우 이를 변경할 수 있습니다.진짜보고 싶다매뉴얼에 내장된 Shopt. 하지만 이렇게 할 이유가 없습니다. 기능이 여러 면에서 더 좋습니다.
답변2
별칭은 스크립트에서 사용할 수 없기 때문입니다. 별칭은 터미널에 입력할 때만 "변환"됩니다(그렇지 않으면 ls
지금 어떻게 또는 무엇에 반응할지 알 수 없기 때문에 스크립팅이 어려울 수 있습니다).rm
답변3
일반적으로 대화형 셸에서만 정의되는 별칭의 가시성 문제 외에도 다음 을 사용하여 eval
별칭을 실행 해야 합니다.별칭이 쉘 변수에 있는 경우.
데모
다음은 간단한 별칭입니다.
$ alias testing='echo this is test'
$this
인용하지 않더라도 단순히 인용하는 것은 작동하지 않습니다.
$ foo() { local this=testing; $this "$@"; }
$ foo bar
testing: command not found
eval
이 작업을 수행하려면 다음 방법을 사용해야 합니다 .
$ foo() { local this=testing; eval $this '"$@"'; }
$ foo bar
this is test bar
답변4
변수가 alias
스크립트의 일부라고 생각합니다.
다음은 언제든지 수행할 수 있지만 [권장하지는 않습니다]
[arif@arif ~]$ yumi='yum install -y'
[arif@arif ~]$ $yumi tmux
Error: This command has to be run under the root user.
이 방법이 권장되지 않는 이유와 따라야 할 방법이 링크에서 논의되었습니다.