WindowsからRed Hat Enterprise LinuxサーバーへのリモートPuttyセッションを実行しています。
会社の制限により、Linuxユーザーのデフォルトシェルをbashからzshに変更することはできません。代わりに読み取り専用アクセス権があります。~./bash_profile
このアクセス権は実行され~/.bashrc
(読み取り専用アクセス権もあり)、~/.bash_custom
書き込みアクセス権がある場所で実行されます。内部で~/.bash_custom
zshを実行してシェルを変更します。
zshを実行する行を含めると、puttyが提供するリモートコマンドは実行されません。 zshの実行をコメントアウトすると正常に動作するため、これが問題であることがわかります。
私のzshには、puttyで実行されるリモートコマンドの一部として使用したいいくつかのエイリアスとPATH修正があります。実行のためにbashシェルからzshにリモートコマンドを渡すには?
答え1
一部の(最も現在の)システムでは、sshを介して実行するときに非対話モードで実行している場合でも(たとえば、where running 1ドキュメントを実行している場合など)、読み取ることができる(およびそのシステム全体で)bash
ビルド時に設定します。 。bash
~/.bashrc
/etc
ssh some command
sshd
bash -c 'some command'
あなたができることはあなたの上部に以下を追加することです~/.bash_custom
。
export SHELL="$(command -v zsh)" # tell everyone your preferred shell
case ${SSH_CONNECTION+s}:${-//[^ilc]}:$#:$SHLVL in
(s:c:0:1) exec zsh -c -- "$BASH_EXECUTION_STRING";;
(*:i:0:*) exec zsh;;
esac
bashがbyで実行されている場合はzsh
同じコードを使用して実行され、bashが対話的に実行されると別々に実行されます。bash -c 'some code'
sshd
zsh
2番目のケースは、bashがログインシェルとして呼び出される場合にのみ制限できます。
if shopt -q login_shell; then
exec zsh
fi
および/または次にssh
置き換えて*:i:0:*
s:i:0:*
厳密に言えbash -c -- 'some command'
ば、実行する必要がありますが、一部のシェルはそれをサポートしていないため(またはcsh、fish、rc ...などの必要はないため)サポートしません。