最近まで、私はzshのfg
andコマンドがどのように機能するかに非常に満足していました。jobs
- ただ
fg
- >最新のバックグラウンドタスクをバックフォアグラウンドに戻します。 jobs
->コマンド名(パラメータを含む)を表示し、PIDも表示します(記憶できません)。
最新のFedora 33アップデート以降、これらのzshの動作は(私にとって)非常に迷惑な方法で変更されました。
fg
最も低いジョブIDを持つジョブは、前景に移動されます(つまり、最新のバックグラウンドジョブではありません)。- 「ジョブ」出力はより簡潔です。たとえば、次のようになります。
[3] + suspended (signal) mutt
[4] - suspended
ジョブが4
vimセッションの場合...
だから、いくつかのzshのデフォルト値が変更されたと仮定します。だから私の質問は:どのようにより便利な動作を整理してfg
返すjobs
ことができますか?
(これは、jobs
引数とpidでコマンド名を常に表示し、fg
最新のバックグラウンドタスクを前景にインポートできることを意味します。)
(現在はzsh-5.8-3.fc33.x86_64にあります。)
編集1:セッション例:
$ zsh
~ $ man man
zsh: suspended man man
~ $ vim blah
zsh: suspended
~ $ jobs
[1] - suspended man man
[2] + suspended
~ $ fg
[2] - continued
zsh: suspended
zsh: suspended
~ $ jobs
[1] + suspended man man
[2] - suspended
CtrlZ毎回フォアグラウンドタスクを一時停止しました。+
出力でタグを見つけますjobs
。また、私を驚かせたのは、zsh: suspended
vimを2回目で一時停止してから2行が出たということです。すでにhang manプロセスにhangシグナルが再送されていると思いますか?
編集2:タスク制御の問題は、タスクがvim
。 vimを呼び出す方法の詳細は次のとおりです。
$ which vim
vim=__vi_internal_vim_alias
$ alias vim
vim=__vi_internal_vim_alias
$ typeset -f __vi_internal_vim_alias
__vi_internal_vim_alias () {
(
test -f /usr/bin/vim && exec /usr/bin/vim "$@"
test -f /usr/bin/vi && exec /usr/bin/vi "$@"
)
}
まあ、この定義は私のプロフィールから来たものではありません。システムの変更により発生しているようです。vim
ジョブ制御を呼び出すと、\vim
問題は再発生しません。サブシェルがzshのコマンドライン文字列の生成やその他の操作を台無しにしたようです。また、見ることができますその他関連レポート。
それでは、これはどこから来たのでしょうか?
$ cd /etc
$ grep -r __vi_internal_vim_alias . -r 2>/dev/null
./profile.d/vim.sh:__vi_internal_vim_alias()
./profile.d/vim.sh: alias vi=__vi_internal_vim_alias
./profile.d/vim.sh: alias vim=__vi_internal_vim_alias
./profile.d/vi.sh:__vi_internal_vim_alias()
./profile.d/vi.sh: alias vi=__vi_internal_vim_alias
./profile.d/vi.sh: alias vim=__vi_internal_vim_alias
$ rpm -qf ./profile.d/vim.sh
vim-enhanced-8.2.2146-2.fc33.x86_64
$ rpm -qf ./profile.d/vi.sh
vim-minimal-8.2.2146-2.fc33.x86_64
ベストアンサー1
これはvim
、Fedoraがサブシェルでvimを起動するためにシステム全体のエイリアスを定義し始めたためです。
これはコンテンツが左右に破損しているように見えるため、これらのエイリアスはロールバックされます。https://bugzilla.redhat.com/show_bug.cgi?id=1918575