図書館コードがあります。可能zsh
(set)で実行されますが、ZSH_VERSION
呼び出し元のzsh
可能sh
/ksh
エミュレーションモードで。 zshパラメータ拡張(例:すべての変数のリスト)が必要なので、次のように試しましたemulate zsh -c ...
。
export code='print -rl -- ${(k)parameters}'
zsh --emulate sh -c 'emulate zsh -c "$code"' # nothing
zsh --emulate ksh -c 'emulate zsh -c "$code"' # nothing
zsh --emulate zsh -c 'emulate zsh -c "$code"' # useless, but works
# emulate -[LR] zsh make no difference
sh
では…一度エミュレーションに入るとksh
今は出られないというのですか?
ベストアンサー1
(k)shシミュレーションを終了できます。emulate
組み込みコマンドは、いくつかのオプションを設定します。これは、長いzshバージョン固有のsetopt
コマンドのショートカットと目的の範囲を取得するためのいくつかの設定です。
このオプションで--emulate
zshを起動すると、いくつかのオプションを設定する以上の作業が行われます。これ手動残念ながら、これはあいまいです。
シェルのエミュレートコマンドと比較してシームレスなエミュレーションを保証するには、このオプションを使用するときに特定の追加手順を実行する必要があります。たとえば、POSIXの使用と競合する変数(パスなど)は、シェルで定義されていません。
--emulate sh
ロード中に--emulate ksh
発生していない、またはロード中のいずれか基準寸法例えばzsh/parameter
提供されるものです$parameters
。必要に応じて、zshがエミュレーションモードで起動されても明示的にロードする必要があります。比較:
$ zsh --emulate sh -c 'emulate zsh -c "echo \${(k)modules}"'
$ zsh --emulate sh -c 'zmodload zsh/parameter; emulate zsh -c "echo \${(k)modules}"'
zsh/parameter zsh/main zsh/rlimits
だから:
$ export code='zmodload zsh/parameter; print -rl -- ${(k)parameters}'
$ zsh --emulate sh -c 'emulate zsh -c "$code"'
galiases
…
EGID