当我运行如下命令时,无法在我的托管帐户上扩展别名:
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)
手册页:
当 shell 非交互式时,别名不会展开,除非使用 shopt 设置 Expand_aliases shell 选项(请参阅下面的 SHELL BUILTIN COMMANDS 下的 shopt 描述)。
答案2
使用 SSH 远程执行命令时获得的 shell 既不是交互式 shell,也不是登录 shell:
$ ssh server 'bash -c "echo $-"'
chsB
(回复中没有i
也没有)l
在 Bash 的情况下,这意味着不会读取任何常用的初始化文件。
您可以通过添加到 Bash 调用来强制远程 shell 成为登录 shell ,这意味着它将解析、 、-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
在第一行。