내 별칭 확인자는 명령줄에서 실행되지만 스크립트 내에서는 실행되지 않습니다.

내 별칭 확인자는 명령줄에서 실행되지만 스크립트 내에서는 실행되지 않습니다.

-to popd의 별칭이 작동하는지 확인하면서 bash 시작 시 로드할 수 있는 파일에 모든 별칭을 덤프하는 간단한 스크립트를 만들려고 합니다.

alias -p | sed 's/alias -=/alias -- -=/' > ~/.bash_aliases

명령줄에서 실행하면 작동하는 것처럼 보이지만 스크립트에 넣고 실행하면(상단 #!/bin/bashchmod +x) 빈 파일이 생성됩니다. 내가 놓치고 있는 bash 지식이 무엇인지 말해 줄 수 있는 사람이 있나요?

중요한 경우 bash v4.2.10을 사용하고 있습니다.

답변1

쉘 스크립트는 호출 프로그램의 환경 변수 등을 상속하지만 별칭 및 명령 기록과 같은 항목은 상속하지 않습니다.

모든 별칭이 공통 위치(예: )에 있는 경우 ~/.bashrc먼저 해당 파일을 스크립트에 소스로 넣을 수 있습니다.

. $HOME/.bashrc

그런 다음 쉘 스크립트의 실행 컨텍스트에서 파일에 정의된 모든 별칭을 갖게 됩니다 .bashrc.

별칭 정의가 여기저기에 있는 경우 쉽게 병합할 수 있는 방법이 없습니다. "내 모든 별칭 저장"을 함수로 작성해야 합니다. 예를 들어 다음과 같은 것을 추가할 수 있습니다 ~/.bash_profile.

function dumpalias {
    alias -p | sed 's/alias -=/alias -- -=/' > ~/.bash_aliases
}

dumpalias그런 다음 로그아웃했다가 다시 로그인한 후 원하는 동작을 얻으라고 말할 수 있습니다 .

답변2

이것을 스크립트에 넣고 실행하면 현재 쉘에서 별칭을 상속받지 않는 새 쉘이 시작됩니다. 그래서 스크립트는셸 별칭을 저장합니다. 이러한 명령을 실행하는 셸에는 별칭이 정의되어 있지 않습니다.

당신은 할 수원천현재 셸에서 해당 스크립트를 실행합니다.

. /path/to/script

또는 다음과 같이 작성할 수 있습니다.쉘 기능.

관련 정보