다음과 같은 명령을 실행할 때 호스팅 계정의 별칭을 확장할 수 없습니다.
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
첫 번째 줄에.