エイリアスを使用するには、SSH経由でリモートでコマンドを実行します。

エイリアスを使用するには、SSH経由でリモートでコマンドを実行します。
shopt -s expand_aliases
ttmp="SUCCESS"
alias aliased_command='echo $ttmp'

上記の行を.bashrcファイルに追加すると、エイリアスをリモートで使用できます。

[USER@REMOTESERVER ~]$ ssh MYSERVER aliased_command
SUCCESS

シェルが非対話型の場合、Shoptを使用してExpand_aliasesシェルオプションを設定しない限り、エイリアスは拡張されません。

expand_aliasesオプションを使用すると、非対話型シェルでエイリアスを使用できます。

しかし、私が実行したとき:

[USER@REMOTESERVER ~]$ ssh MYSERVER echo $-
himBH

SSHを介してリモートコマンドを実行すると、対話型シェルを使用しているようです。 (i含む)

これは正しいですか?

もしそうなら、Expand_aliasesオプションが必要なのはなぜですか?

エラーが発生した場合、ssh SERVER COMMAND非対話型シェルを使用している場合、MYSERVERファイルをssh MYSERVER COMMAND読み取るのはなぜですか?.bashrc非対話型シェルは.bashrcファイルを読みません。

cf) コマンドを引用すると、別の出力が生成されます。

[USER@REMOTESERVER ~]$ ssh MYSERVER 'echo $-'
hBc

すべてのリンク、コメントを送信していただきありがとうございます。

ベストアンサー1

少なくとも2つの側面があります。

1.見積もり

引用されていないコンテンツは$-あなたが拡張します。地元のシェル。ローカルは、ssh取得した複数の引数に基づいてシェルコード(リモート側で実行するため)を作成できます。これによりssh MYSERVER echo $-リモートシェルが得られますecho himBH。このhimBH文字列はローカルシェルで提供されます。これによりssh MYSERVER 'echo $-'リモートシェルが得られますecho $-

バラよりSSH経由で複雑なコマンドラインを実行する方法そして私の答え。ここではすべての内容を繰り返すことはありません。最も重要なもの:

リモートシェルの取得を制御するには、$command_line_built_by_ssh以前に発生した解析と解釈を理解、予測、調整する必要があります。ローカルコマンドを発行する必要があるため後ろにsshローカルシェルを実行してそれを消化すると、リモート側で実行したい内容が正確になります。$command_line…

ssh良いアプローチは、正確な(リモート)コマンドを単一の引数としてローカルに渡すことです。それがまさにあなたがすることですssh MYSERVER 'echo $-'。一重引用符は基本拡張を防止します。$-リモートシェルのコンテキストでは引用されていません。

結果hBcはこちらリモートシェルから。リモートシェルは対話型ではありません。

2. Bashはスマートになることを試みます

非対話型シェルソーシングについては、.bashrc以下を参照してください。私の他の答えは次のとおりです。:

ツイスト2:Bashは、SSHサーバーで実行されているのと同じように、ネットワーク接続に接続されている標準入力で実行されていることを確認しようとします。 Bashがこのように実行されていると判断した場合は、コマンドを読み込んで実行します~/.bashrc

あなたがつながったバッシュ文書。私が言うのは「リモートシェルデーモンによって呼び出されます」です。より多くの紆余曲折があります。リンク全体に対する回答をご覧ください。

おすすめ記事