함수에 별칭을 사용하시나요?

함수에 별칭을 사용하시나요?

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.

이 방법이 권장되지 않는 이유와 따라야 할 방법이 링크에서 논의되었습니다.

관련 정보