비대화형 쉘 확장 별칭

비대화형 쉘 확장 별칭

다음과 같은 명령을 실행할 때 호스팅 계정의 별칭을 확장할 수 없습니다.

ssh user@server "bash -c \"alias\""

내 .bashrc 파일은 다음과 같습니다.

echo .bashrc
# .bashrc

shopt -s expand_aliases

# Source global definitions (commenting this out does nothing)
if [ -f /etc/bashrc ]; then
        . /etc/bashrc
fi

# User specific aliases and functions
alias php="php55"
alias composer="php ~/bin/composer.phar"

위의 ssh 명령을 실행하면 ".bashrc"가 에코되는 것을 볼 수 있습니다. 그러나 별칭을 실행하려고 하면 아무것도 얻지 못합니다.

"bash -ic"을 시도해 볼 수 있지만 실제로는 쉽게 변경할 수 없는 스크립트에 있으며 이것이 작동하지 않는 이유를 알고 싶습니다.

산출 ssh user@server "bash -c \"shopt\""

.bashrc
autocd          off
cdable_vars     off
cdspell         off
checkhash       off
checkjobs       off
checkwinsize    off
cmdhist         on
compat31        off
compat32        off
compat40        off
dirspell        off
dotglob         off
execfail        off
expand_aliases  off
extdebug        off
extglob         off
extquote        on
failglob        off
force_fignore   on
globstar        off
gnu_errfmt      off
histappend      off
histreedit      off
histverify      off
hostcomplete    on
huponexit       off
interactive_comments    on
lithist         off
login_shell     off
mailwarn        off
no_empty_cmd_completion off
nocaseglob      off
nocasematch     off
nullglob        off
progcomp        on
promptvars      on
restricted_shell        off
shift_verbose   off
sourcepath      on
xpg_echo        off

산출 ssh user@server "bash -c \"echo $SHELL\""

.bashrc
/bin/bash

답변1

bash(1)매뉴얼 페이지 에서 :

셸이 비대화형인 경우, Shopt를 사용하여 Expand_aliases 셸 옵션을 설정하지 않으면 별칭은 확장되지 않습니다(아래 SHELL BUILTIN COMMANDS 아래의 shopt 설명 참조).

답변2

SSH를 사용하여 원격으로 명령을 실행할 때 얻는 셸은 대화형 셸도 아니고 로그인 셸도 아닙니다.

$ ssh server 'bash -c "echo $-"'
chsB

(답변에는 아무 내용도 없습니다 i)l

Bash의 경우 이는 일반적인 초기화 파일을 전혀 읽지 않음을 의미합니다.

Bash 호출에 , 를 추가하여 원격 셸을 로그인 셸로 강제 설정할 수 있습니다. 즉, , , 를 -l먼저 구문 분석하고 해당 순서대로 찾을 수는 있지만 검색할 수는 없습니다. 이는 별칭을 이러한 파일 중 하나에 넣어야 함을 의미합니다.~/.bash_profile~/.bash_login~/.profile~/.bashrc

답변3

나도 같은 문제가 있었는데 shopt -s expand_aliases처음에는 도움이 되지 않는 것 같았습니다. 실제 별칭을 추가하기 전에 이 옵션을 설정해야 한다는 것을 알았습니다. 따라서 .bashrc옵션을 설정하기 전에 별칭을 생성 하면 expand_aliases해당 별칭을 사용할 수 없습니다. 따라서 옵션을 설정한 후 별칭을 로드(또는 다시 로드)해야 합니다.

답변4

다음을 입력하여 문제를 해결할 수 있습니다.

if [ -f /etc/skel/.bashrc ]; then . /etc/skel/.bashrc; fi

첫 번째 줄에.

관련 정보