一部のATMマシンで奇妙な動作が発生します。少なくとも私と私の同僚には奇妙に見え、何も説明が見つかりませんでした。 :)
[編集1]
次の段落が間違っているようです。最後の編集2を参照してください。
ここではbashとzshを使用します。したがって、ssh login@host
zshをデフォルトのシェルとして使用するように構成されている一部のzsh-default-machines(plain)にSSHを介して接続するときchsh -s /usr/bin/zsh
に開かれるシェルは、対話型ですが対話型です。ログインしていませんそのコンピュータにすでにログインしているかどうかに関係なく、シェル。
私の理解によると、SSHを介してコンピュータに接続すると、そのコンピュータで新しいユーザーセッションが開始される必要があるため、必要なシェルはログインシェルです。 zshもこれと同じでなければなりませんか?
コンピュータのデフォルトシェルをbashに変更する場合は、ログインシェルを使用してコンピュータにログインします。
これはzshの正常な動作ですか?変更できますか?それともいくつかの設定エラーですか?
[/編集1]
[編集2] いいですね。 ZSHドキュメントによれば、ログインシェルかどうかを簡単にテストできます。
$ if [[ -o login ]]; then; print yes; else; print no; fi
望むより:http://zsh.sourceforge.net/Guide/zshguide02.html
ただし、zsh man項目/文書のため、zshはソースを使用して/etc/profile
スクリプトをインポートする必要があります/etc/profile.d/*.sh
。上記の問題は、スクリプトが次のようになるという事実に由来します。いいえソースなので、ほとんどの環境変数とシステム構成項目が正しく初期化されていません。ただし、上記のようにbashをデフォルトのシェルとして使用し、/etc/profile
profile.dフォルダのスクリプトをソースとして使用する場合です。
[/編集2]
[編集3 - 回答] 下記のコメントに返信いただいた@StéphaneChazelasに感謝します!ソーシングはzsh
/ compatibilityモードで実行されている場合にのみ発生するようです/etc/profile
(該当するmanエントリを参照)。sh
ksh
https://linux.die.net/man/1/zsh)。 SSH経由でログインすると、この互換モードは実行されないため、必ずしも独自に取得するzsh
必要はありませんが、[/edit 3]で実行する必要があります。/etc/profile
.zprofile
システム:オペレーティングシステム:Ubuntu 18.04 zsh-5.4.2、omz、および一部のプラグインが有効になっています。
ありがとうございます!
答え1
これがZSHの仕組みです。/etc/profile
ZSH用の初期化ファイルではありません。。 ZSH/etc/zprofile
と~/.zprofile
。
ZSH初期化ファイル:
/etc/zshenv
~/.zshenv
- ログイン方法:
/etc/zprofile
~/.zprofile
- インタラクティブ:
/etc/zshrc
~/.zshrc
- ログイン方法:
/etc/zlogin
~/.zlogin
ヒント:
- Linux端末で開かれるデフォルトのシェルは、非ログインの対話型シェルです。しかし、macOSではログインシェルです。
引用する
答え2
sshd
クライアントが実行するコマンドを送信していない場合は、ログインシェルを実行します。これは、実行コマンドが提供されていないときの動作ではなく、サービスを呼び出す動作を模倣するrsh
ためのものです。rlogind
rshd
rlogind
またはlogin
などのログインシェルであることをシェルに通知するには、としてtelnetd
シェルsshd
を起動します。argv[0]
-
あるいは、もちろんzsh
他のすべてのシェルも同様に理解しています。そうしないと、呼び出すことはできません。ログインモデル。
ここでログインシェルが出ないような症状は/etc/profile
説明がないからです。
/etc/profile
Bourne Shellに似たログインセッション初期化ファイル。構文はBourneシェル構文(またはBourneシェルが現在ほとんど使用されていないため、POSIX sh構文である可能性があります)であると予想され、ログイン時にすべての構文は(ほとんど)BourneまたはPOSIX sh構文と逆互換です。
csh
そしてtcsh
完全に異なる構文を使用してください/etc/csh.login
。fish
使用済み/etc/fish/config.fish
(ログインモードかどうか)
zsh
の構文はBourne / POSIXと完全に互換性がないため、デフォルトでは読みません/etc/profile
。ログインモードの設定ファイルは/etc/zsh/zprofile
(またはビルド時の設定方法/etc/zprofile
によって異なります)。zsh
/etc/zsh/zlogin
/etc/zlogin
zshrc
zsh
ソースはエミュレーションまたはエミュレーション/etc/profile
時にのみ提供されます。この場合、構文はデフォルトのエミュレーションモードよりもPOSIX shの構文に近いです。sh
ksh
zsh
ログインモードでzsh
ソースを取得するには、追加する必要があります/etc/profile
。source /etc/profile
ただし、の構文とそのファイルがソースとして使用されている他のすべてのファイルがその構文と互換性があることを確認した場合にのみ適用されます/etc/zsh/zprofile
。/etc/profile
zsh
または、以下を追加できます。
emulate sh -c 'source /etc/profile'
到着する/etc/zsh/zprofile
。その後、エミュレーションモードから取得/etc/profile
しますsh
(そしてその中で宣言された関数もエミュレーションモードのままですsh
)。