非対話型シェル拡張エイリアス

非対話型シェル拡張エイリアス

次のコマンドを実行すると、ホスティングアカウントのエイリアスを拡張できません。

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

(答えには何もありませんil

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

最初の行に。

関連情報