私の推奨するアプローチはSSH構成ファイル(以下で説明)を使用することですが、使用方法に応じていくつかの解決策があります。
コマンドライン引数
このアプローチの最良の答えは、受け入れられた答えに対するchristianbundyの返答だと思います。
ssh -t example.com "cd /foo/bar; exec \$SHELL -l"
二重引用符を使用すると、($SHELL
ここにあるように)エスケープされない限り、ローカルマシンの変数を使用できます。または、単一引用符を使用することもできます。使用するすべての変数は、ターゲットマシンの変数になります。
ssh -t example.com 'cd /foo/bar; exec $SHELL -l'
バッシュ機能
コマンドをbash関数でラップすることにより、コマンドを簡略化できます。これを入力したいとしましょう:
sshcd example.com /foo/bar
これをあなたに追加することでこれを機能させることができます~/.bashrc
:
sshcd () { ssh -t "$1" "cd \"$2\"; exec \$SHELL -l"; }
リモートマシンに存在する変数をディレクトリに使用している場合は、必ずエスケープするか、一重引用符で囲んでください。たとえば、これはJBOSS_HOME
リモートマシンの変数に格納されているディレクトリにcdします。
sshcd example.com \$JBOSS_HOME
SSH設定ファイル
追加のコマンドライン引数を使用せずに、通常のsshコマンドを使用して特定の(または任意の)ホストのこの動作を常に確認したい場合は、ssh構成ファイルでRequestTTY
およびRemoteCommand
オプションを設定できます。
たとえば、次のコマンドのみを入力します。
ssh qaapps18
ただし、常に次のコマンドのように動作させたい場合:
ssh -t qaapps18 'cd $JBOSS_HOME; exec $SHELL'
だから私はこれを自分の~/.ssh/config
ファイルに追加しました:
Host *apps*
RequestTTY yes
RemoteCommand cd $JBOSS_HOME; exec $SHELL
このルールは、ホスト名に「apps」が含まれるすべてのホストに適用されます。
詳細については、http://man7.org/linux/man-pages/man5/ssh_config.5.htmlを参照してください。