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