아직 정의되지 않은 명령을 기반으로 함수를 만드는 방법은 무엇입니까?

아직 정의되지 않은 명령을 기반으로 함수를 만드는 방법은 무엇입니까?

내 세션에 일부 환경 설정을 로드하는 일부 스크립트(내 제어 범위 밖)가 있습니다. 따라서 로드하고 싶을 때마다 일련의 명령을 실행해야 합니다.

export SOME_VAR=/path/to/main/folder
source $SOME_VAR/loading/stuff.sh --quiet
loadApp1
loadApp2
loadApp3
loadApp4

하나의 명령으로 이 작업을 수행하고 싶어서 함수(거의 위 줄)를 만들었지만 작동하지 않습니다.

내 생각에 이것은 loadApps가 별칭이고 stuff.shBash가 내 함수를 구문 분석할 때 아직 별칭을 알지 못하기 때문이라고 생각합니다.

이식성을 잃지 않고 단일 명령을 사용하여 이를 수행하려면 어떻게 해야 합니까?

$HOME/.bashrc추신: 별칭 은 다른 곳에서 변경할 수 있지만 표시되지 않기 때문에 내 별칭을 복사하고 싶지 않습니다 .

답변1

별칭인 경우 다음과 같이 작성해야 합니다.

myFunction() {
  export SOME_VAR=/path/to/main/folder
  . "$SOME_VAR/loading/stuff.sh" --quiet
  eval '
  loadApp1
  loadApp2
  loadApp3
  loadApp4'
}

읽기/파싱 시 별칭이 확장됩니다. eval그러한 구문 분석을 강제합니다.

답변2

안전을 위해 스크립트를 사용하여 다음을 수행합니다.

#!/usr/bin/env bash
export SOME_VAR=/path/to/main/folder
source $SOME_VAR/loading/stuff.sh --quiet
loadApp1
loadApp2
loadApp3
loadApp4

그냥 저장하고 $PATH, 실행 가능하게 만들고, 함수 대신 실행하세요.

답변3

알 수 없는 명령이 포함된 함수를 선언하는 데 문제가 없습니다. 실행을 시도하기 전까지는 문제가 발생하지 않습니다.

$ unknown() { foo; bar; baz; }
$ unknown
bash: foo: command not found
bash: bar: command not found
bash: baz: command not found

관련 정보