
私は定期的に SSH 経由でリモート ホストにログオンする必要があり、bash オプションを使用するのが好きでset -o vi
、通常はcd
特定のディレクトリにログオンする必要があります。これらのホストは一時的なもの (定期的に作成および破棄される) なので、ログオンして / に保存する.bash_profile
ことはできませ.bashrc
ん。そこで、SSH 経由で接続するときにこれを実行して、リモート サーバーに接続するたびに同じコマンドを入力しなくても済むようにする方法を調べていました。これを実現するためにいくつかの方法を試しましたが、どれもうまくいかないようです。このコマンドを正しく実行するのを手伝ってくれる人はいませんか? 簡単に言えば、これが私がやりたいことです。
cd
特定のディレクトリに- bashオプションを設定する
set -o vi
私が試してみた方法は次のとおりです:
ssh [email protected] -t "cd /data; exec bash --login -c \"set -o vi\""
set -o vi
これは実際には機能しているように思いますが、コマンドが実行されると次のようなメッセージが表示されてセッションが切断されるため、SSH セッションは終了します。
remotehost.com への共有接続が閉じられました。
これらのコマンドを実行した後もセッションを開いたままにする方法はありますか? または、目的を達成する別の方法はありますか?
答え1
いくつかのオプション:
ssh -t [email protected] 'cd /data && exec bash --login -o vi'
ksh
(これは、 //zsh
を含むすべての POSIX ライクなシェルで動作しますdash
。これ-o
は POSIXsh
ユーティリティの標準オプションであり、vi
標準オプションの 1 つです。このコマンド ラインは、Bourne、csh、rc、fish を含むすべての主要なシェル ファミリのシェルとも互換性があるため、ルート ユーザーのログイン シェルに関係なく動作するはずです)
または:
ssh -t[メールアドレス]'cd /data && exec env SHELLOPTS=vi bash --login'
実際には、2 番目の変数は使用しないでください。つまり、$SHELLOPTS
変数は環境内に存在し、すべてのbash
呼び出しに影響します (非対話型の呼び出しは対話型シェルからの呼び出しを継承し、さまざまな問題を引き起こします)。
また、bash
には 2 つのオプション セット (1 つは-o
/で設定し、もう 1 つは/$SHELLOPTS
で設定) があることにも注意してください。-O
$BASHOPTS
答え2
コマンドを2つにします。
- リモート ホスト上で実行されるコマンドをファイルに格納します
.bashrc.tmp
。 $ scp .bashrc.tmp [email protected]:
$ ssh <options> [email protected] "bash --login --rcfile ${HOME}/.bashrc.tmp"
この方法では、元のファイルをバックアップする必要さえありません.bashrc
。
答え3
ホスト上のフォルダーから別のフォルダーへのジャンプを簡素化するには、apparix をインストールし、ジャンプする必要があるさまざまな場所にブックマークを設定して、to folderX
apparix で次のように使用します。https://micans.org/apparix/man/apparix.html
答え4
私は共有ユーザーIDを持つリモートシステムを使用しているので、他のユーザーにも影響するため、スタートアップファイルを編集したくありません。ただし、ここでの投稿で、必要なオプションを設定する方法がわかりました。私がファイルvi
に入力した内容は次のとおりです。~/.ssh/config
Host testsystem
User tester
RequestTTY yes
RemoteCommand exec /bin/bash --login -o vi
これは非常に簡単です。必要な「cd」の部分についてはわかりません。