그래서 내보낸 bash 함수가 많은 .bash_aliases 파일이 있는데 그 중 많은 함수가 sh와 호환되지 않습니다.
문제는 sh가 내 노트북(OS X)과 SSH를 연결하는 Linux 상자의 모든 곳에서 사용된다는 것입니다. 또한 항상 bash 기능과 스팸 오류를 가져오려고 시도합니다.
문제의 기능은 다음과 같습니다.
- 이름에 "-"가 포함된 모든 기능(참고: Linux가 아닌 OS X의 스팸 오류임)
그리고 구문이 bash에서만 유효한 log() 함수(아래)
log() { # braces allow for piping of same output to multiple files { $@ 2> >(tee .err.log); } &> >(tee .out.log); echo; echo logged output to .err.log \& .out.log respectively; } export -f log
그렇다면 이 문제를 어떻게 해결해야 할까요? 함수 이름을 바꾸거나 */bin 디렉토리에 별도의 스크립트에 넣을 필요가 없다면 더 좋을 것 같습니다...
도와주셔서 감사합니다!
PS 스크린샷:
편집: 정보가 충분하지 않다는 것을 깨달았습니다. 그렇습니다. .bash_profile
소스 .bashrc
는 소스입니다 .bash_aliases
(저는 소스가 없습니다 .profile
). 또한 .bash_aliases에 종료 절을 만들어 보았지만 $SHELL='sh'
작동하지 않습니다.내 환경에서 직접 가져오기(@Bodo와 마찬가지로수입스크린샷의 오류 표시).
편집 2 중요 참고 사항: 또한 이상하게도 Linux 상자에서 /bin/sh로 ssh를 보내는 것을 발견했습니다.bash에 대한 심볼릭 링크입니다.. 이것은 bash를 의미합니다.구매할 때 오류가 발생하지 않습니다.환경에서 가져올 때 log()가 실제로 오류를 발생시키나요?
답변1
이러한 함수를 내보내면 안 됩니다. 대신, 필요한 .bash_aliases
모든 인스턴스에 리소스를 제공하는 것이 좋습니다 . bash
(대화형 쉘의 기능만 필요하다고 생각합니다 bash
.)
비슷한 질문이 여기에 언급되어 있습니다./bin/sh: 'some-function'에 대한 함수 정의를 가져오는 중 오류가 발생했습니다., 여기서 허용되는 답변은 함수 이름을 바꾸는 것을 제안합니다.
시스템에 연결되어 있어도 /bin/sh
POSIX처럼 작동하고 준수하려고 호출할 때 오류가 표시됩니다.bash
bash
sh
sh
https://www.gnu.org/software/bash/manual/html_node/Bash-Startup-Files.html#Invoked-with-name-sh
답변2
간단한 해결책은 그것들을 조달하는 것이 아닙니다. 표준 파일이 아니기 때문에 ~/.bash_aliases
구성 파일 중 하나에서 명시적으로 가져와야 합니다. 따라서 간단한 해결책은 해당 소스 라인(대부분 귀하의 소스 라인 ~/.bashrc
)을 찾아 다음에서 변경하는 것입니다(또는 시스템에 있는 것이 무엇이든 이것은 Ubuntu에서 가져온 것입니다).
if [ -f ~/.bash_aliases ]; then
. ~/.bash_aliases
fi
이와 관련하여:
if [ -f ~/.bash_aliases ] && [ -n "$BASH_VERSION" ]; then
. ~/.bash_aliases
fi
이렇게 하면 .bash_aliases
bash를 실행할 때만 파일을 가져옵니다.
명확히 하기 위해 귀하의 질문과 의견에 있는 정보를 바탕으로 여기서 무슨 일이 일어나고 있는지 가정합니다.
SSH를 통해 컴퓨터에 연결하고 있습니다.
SSH를 사용하면 기본
/bin/sh
로그인 쉘이 시작됩니다.이것은 로그인 쉘이므로
~/.profile
.설정
.profile
이 소스 코드 (역시 표준은 아니지만 일반) 이므로 bash를 실행하지 않더라도~/.bashrc
지금 읽을 수 있습니다 ..bashrc
설정
.bashrc
이 source~/.bash_aliases
이므로 해당 파일을 읽고 오류가 생성됩니다.
개인적으로 이 작품을 좋아하지 않는 또 다른 이유일부 시스템에서 내리는 결정기본 ~/.bashrc
소스를 만듭니다 ~/.profile
.