.bashrcを取得したら、sshを使用して対話型シェルでコマンドを実行します。

.bashrcを取得したら、sshを使用して対話型シェルでコマンドを実行します。

SSHを介してリモートUbuntuシステムに接続してソースをインポートし、.bashrcそのシステムで設定したパラメータに従ってコマンドを実行したいと思います.bashrc。これらすべては、コマンドが完了した後も閉じられない対話型シェルにあります。

今まで試したことは

ssh user@remote_computer -t 'bash -l -c "my_alias;bash"'

そうでなければ

ssh user@remote_computer -t "my_alias;bash"

これは通常のコマンド(例ls:)に対して機能しますが、で定義されているエイリアスを実行しようとすると.bashrcエラーが発生します。

bash: my_alias: command not found

しかし、手動で書き直して実行してみました。

.bashrcそれでは、コマンドを呼び出す前にコマンドのソースをどのように確認しますか?

ベストアンサー1

問題は、非対話型シェルでエイリアスを実行しようとしていることです。を実行すると、ssh user@computer command非対話command型で実行されます。

非対話型シェルは(man bashから)エイリアスを読みません。

シェルが非対話型の場合、Shoptを使用してExpand_aliasesシェルオプションを設定しない限り、エイリアスは拡張されません(以下のSHELL BUILTIN COMMANDSの下のshoptの説明を参照)。

手動で再実行すると、最後のコマンドがインタラクティブシェルを起動するため、機能するため、bashエイリアスを使用できるようになります。

bash -iあるいは、単純なログインシェル()の代わりにリモートシステムで対話型シェル()を起動してエイリアスを実行することもできます。bash -l

ssh user@remote_computer -t 'bash -ic "my_alias;bash"'

しかし、これは非常に複雑なアプローチのようです。これを行う理由を説明していませんが、次の選択肢を検討してください。

  1. リモートシステムで通常のログイン対話型シェルを起動し、手動でコマンドを実行します。

    user@local $ ssh user@remote
    user@remote $ my_alias
    
  2. このシステムに接続したときにエイリアスが常に実行されるようにするには、リモートシステム~/.profile(または~/.bash_profile存在する場合)を編集し、最後に次の行を追加します。

    my_alias
    

    ログインシェルが起動するたびに(たとえば経由で接続するたびに)、読み取りが行われるため、~/.profile接続するたびに実行されます。sshmy_alias

    デフォルトでは、ログインシェルはそれを読み、~/.profile無視~/.bash_profileします~/.bashrc。 Ubuntuなどの一部のディストリビューション(Debianおよびその派生ディストリビューション、Archなど)にはデフォルト~/.profileまたは~/.bash_profileファイルソースがあります~/.bashrc。つまり、定義したエイリアスを~/.bashrcログインシェルでも使用できます。すべてのディストリビューションに該当するわけではないため、~/.profileソースコードを手動で編集する必要があるかもしれません~/.bashrc。また~/.bash_profile、存在する場合~/.profilebash では無視されます。

おすすめ記事