次のコマンドを実行すると、ホスティングアカウントのエイリアスを拡張できません。
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
最初の行に。