내 bash 기능을 외부 프로그램에 알리려면 어떻게 해야 합니까?

내 bash 기능을 외부 프로그램에 알리려면 어떻게 해야 합니까?

나는 bash 기능을 가지고 foo있고 bar~/.bashrc.

함수는 다른 명령을 인수 중 하나로 사용하는 foo외부 명령을 호출합니다 . ext_command내가 bar해당 명령으로 전달하고 싶은 것, 즉 내 명령이 .bashrc다음과 같기를 원합니다.

bar() {
...
}
foo() {
 ext_command --invoke bar
} 

그러나 외부 명령이 쉘 스크립트가 아니기 때문에 작동하지 않습니다 bar. 이 문제를 어떻게 해결합니까?

내가 대신 하고 싶어

ext_command --invoke "bash -c 'bar'"

하지만 이 호출에서 Bash는 대화형 셸로 실행되지 않으므로 bar.

따라서 내 문제를 해결하는 한 가지 방법은 Bash를 대화형 셸로 강제 실행하는 것이라고 생각합니다. 불행히도 그 방법을 모르겠습니다.

확실히 효과가 있을 것으로 생각되는 또 다른 접근 방식은 다음과 같습니다.

ext_command --invoke "bash -c 'source ~/.bashrc; bar'"

그러나 어떤 이유로 이것은 작동하지 않고 실제로 실행됩니다.

bash -c 'source ~/.bashrc; bar'

대화형 bash 세션에서 제공됨

bash: bar: command not found

foo어쨌든 나는 이 솔루션 이 어떤 파일에서 나오든 작업하고 싶기 때문에 이 솔루션을 좋아하지 않습니다 .

답변1

일반적으로 다음과 같은 옵션이 있습니다.

  1. 함수를 명령으로 다시 작성합니다. 별도의 스크립트입니다. 일반적인 관행은 디렉토리를 유지 ~/bin하고 이를 $PATH.
  2. 함수를 환경으로 내보내고 다른 쉘이 그곳에서 가져오도록 합니다. 바라보다Bash에서 함수를 "내보낼" 수 있나요?
  3. 접근 가능한 기능을 고집 bar하지만 거기에서 기능을 얻는 것이 ~/.bashrc최선의 해결책이 아닐 수도 있습니다. 자체 파일에 넣고 ~/bin거기에서 가져올 수 있습니다. 이렇게 하면 일이 더 쉬워질 것입니다.
  4. 가능하다면 다른 방법으로 함수에 로직을 제공하세요 ext_command. foo여기에서 문서를 살펴보세요.

관련 정보