BashエイリアスはSSHを介して機能しません。

BashエイリアスはSSHを介して機能しません。

私のBashエイリアスはSSHでは機能しません。たとえば、次のようになります。

$ ssh remote_name ll dir_name
bash: ll: command not found

Bashのマニュアルページは次のように述べています。

Aliases are not expanded when the shell is not interactive,
unless the expand_aliases shell option is set using shopt...

そのため、ファイルの上部にローカルファイルとリモートファイルの両方をshopt -s expand_aliases追加しました(どのファイルが必要かわからないためです。リモートが正しいですか??)。~/.bashrc.bashrc

ローカルBashを再起動してssh remote_name ll dir_name再試行しましたが、残念ながら同じエラーが発生しますbash: ll: command not found

誰でも動作させるにはどうすればよいか説明できますか?

私のBashバージョンが次の場合に備えて:

Local Bash:
$ bash --version 
GNU bash, version 4.3.11(1)-release (x86_64-pc-linux-gnu)

Remote Bash:
$ bash --version 
GNU bash, version 4.3.30(1)-release (x86_64-pc-linux-gnu)

ベストアンサー1

~/.bashrcbash非対話型セッションではなく、非ログインの対話型セッションとして読み込みます。

ssh remote some_commandsome_command非対話型セッションで実行されるため、bashリモートデータを読み取ることはできません~/.bashrc(もちろん、ローカルデータを読み取ることもできません)。

正確に言えば、非対話型セッションは環境変数または(設定されている場合)定義bashされたファイルを読み取ることができます。BASH_ENVENV

エイリアスを引き続き使用するには、対話モードでシェルを開くこともできます。

ssh remote bash -ic 'll'

また、エイリアスはそれ自体が含まれているため、ディレクトリ名を指定するのと同じ引数を受け入れません。パラメータを入力として使用するには、関数を使用する必要があります。同様の関数定義は次のとおりです。

ll_f () { ls -al --color=auto "$@" ;}

これで、次のことができます。

ll_f /dir_name

おすすめ記事