なぜ私のエイリアスがsshで機能しないのですか?


9

で定義されたエイリアスがあります .bashrc

alias l.='ls -d .* --color=auto'

それは非常に便利です:)しかし、それは経由して動作しませんssh

$ ssh localhost l.
bash: l.: command not found

何故ですか?


1
.bashrcシェルがインタラクティブな場合にのみ読み込まれます。
user4556274

1
sshを介したエイリアスでは、おそらく色はありません。エイリアスを変更するとalias l.='ls -d .* --color'、色が表示されます。私はそれを追加すると思いました。少なくとも私はそれを経験していました。
Terrance、

私はそのことについて思っていた@Terrance私はエイリアスを変更(および実行した後、前と色(および列)を取得するが、...私はまだ色(なし列)を取得しないsource .bashrc
Zanna

1
ああ!わかったと思います。が列を表示するalias l.='ls -dC .* --color'場所としてエイリアスを試してくださいC
Terrance、

1
色の問題に対処するために回答を編集しました。
Matei David

回答:


10

試してください:

ssh localhost -t bash -ci l.

注意:

  • エイリアスは~/.bashrc、ローカルマシン上ではなく、リモートサーバー上にある必要があります。

  • この-iオプションはbash、対話型シェルを実行するように指示します。エイリアスは、対話型シェルでのみデフォルトで有効になっています。

  • -tオプションが伝えssh仮想端末を割り当てます。これがないとbash、インタラクティブモードで起動したときに警告メッセージが表示されます。これにより、ls色も有効になります。それがなければ、を使用する必要があります--color=always、を参照してくださいman ls

  • インタラクティブフラグを設定せずにエイリアスを有効にする別の方法、つまりがありshopt -s expand_aliasesます。だからあなたは試すことができます:

    ssh localhost 'bash -c "shopt -s expand_aliases; l."'

    しかしながら:

    • あなたの.bashrcそれを調達シェルが対話の場合かもしれないが唯一のエイリアスを定義します。この例では、シェルはその時点ではインタラクティブではありません。

    • あなたが同じ行に別名を定義しようとした場合、参照これを


1
それはうまくいきます...確かにあなたの説明に、しかし私はssh自分自身に向かっています:)
Zanna

1
を使用する場合、一般的に意味しましたssh。はい、localhost問題ありません。
Matei David

ssh ... <cmd><cmd>完了すると終了します。あとでシェルを保持したい場合はls、試してくださいssh localhost -t 'bash -ci "l.; exec bash"'
Matei David

ああ、わかりました。どうもありがとう。コメントを削除します:)
Zanna
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.