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