서브 쉘 / 자식 프로세스의 별명


15

각 로그인 쉘에 대해 /etc/profile.d/alias.sh에 별명을 설정했습니다. 그러나 script.sh를 실행하면 해당 별칭을 사용할 수 없습니다. 서브 쉘이나 하위 프로세스에 대해서도 별칭을 설정하려면 어떻게해야합니까?

/etc/profile.d/alias.sh

alias rmvr='rm -rv';
alias cprv='cp -rv';
alias mvrv='mv -rv';

답변:


23

별명은 상속되지 않습니다. 그들은 전통적으로 설정하는 이유 bashrc와하지 profile. 대신 또는 시스템 전체 script.sh에서 소스를 제공하십시오 .bashrc.


예를 들어 내 보낸 변수는 상속되고 나머지는 그렇지 않은 것을 의미합니다.
lisak

1
.bashrc가 도움이 될 것이라고 생각하지 않습니다 ... 만약 당신이 그 별명을 서브 쉘에서 사용한다면, 그것을 알지 못합니다
lisak

bashrc에이 대부분의 껍질부터 작업을해야 대화 형 비 로그인 쉘을하는 시작하고, 별칭으로 서브 쉘에서 작업을 할 이유입니다 모든 대화 형 비 로그인 쉘에 대한 읽기()
jw013

aliasName () 호출에 대해
몰랐습니다.

분명하게 말하면, bash alias foo='echo foobar',, enter, (foo)outputs 에서 의미했습니다 foobar.
jw013

10

/etc/profile.d/는 대화식 로그인 쉘에서만 사용되기 때문입니다. 그러나 /etc/bash.bashrc대화 형 비 로그인 셸에서 사용됩니다.

일반적으로 시스템의 전역 별칭을 설정함에 따라 전역 별칭이 /etc/bashrc.d있는 파일을 놓을 수있는 위치 를 만들기 시작했습니다 .

    HAVE_BASHRC_D=`cat /etc/bash.bashrc | grep -F '/etc/bashrc.d' | wc -l`

    if [ ! -d /etc/bashrc.d ]; then
            mkdir -p /etc/bashrc.d
    fi
    if [ "$HAVE_BASHRC_D" == "0" ]; then
        echo "Setting up bash aliases"
            (cat <<-'EOF'
                                    if [ -d /etc/bashrc.d ]; then
                                      for i in /etc/bashrc.d/*.sh; do
                                        if [ -r $i ]; then
                                          . $i
                                        fi
                                      done
                                      unset i
                                    fi
                            EOF
            ) >> /etc/bash.bashrc

    fi

7

서브 쉘로 상속 받으려면 대신 함수를 사용하십시오. 그것들은 환경으로 내 보내질 수 있고 ( export -f), 서브 쉘은 그 함수들을 정의 할 것입니다.

예를 들어,

rmvr() { rm -rv "$@"; }
export -f rmvr

그것들이 많은 경우 먼저 내보내기로 설정하십시오.

set -a # export the following funcs
rmvr() { rm -rv "$@"; }
cpvr() { cp -rv "$@"; }
mvrv() { mv -rv "$@"; }
set +a # stop exporting

0

비슷한 질문으로 bash "명령 모드"를 실행하고 별칭을 사용할 수 있기를 원했습니다.

bash -i 'alias'아무것도하지 않습니다. 그러나 대화 형 설정을 실행 하는 -i 플래그 를 발견 했으므로 bash -ci 'alias'작동합니다.

귀하의 질문에 대해 다음과 같이 파일을 "소싱"하여 파일을 피할 수 있습니다.

 bash -ci '. script.sh'

그런 다음 별칭이 작동합니다. FWIW ...

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.