

jobsコマンドを使用する上でzshでの挙動の違いに困っています．具体的には

[code]

    #!/bin/zsh
    for i in {1..10}; do
        sleep 1 &
        jobs | wc -l
        jobs
    done
    
[/code]

というのを実行すると，実行中のコマンド（sleep）は増えていくのにwcでカウントされる行数は0のままとなってしまいます．  
試しにこれを#!/bin/zshではなく#!/bin/bashにすると期待通りに（wc -lの出力部分が増えていく）動きます．

また，zshの場合でも上記のプログラムを端末上で直接入力した場合であれば，bashのように期待通りに動作することを確認しました．

実行環境は  
・OS:Debian (stretch 9.3)  
・zsh:5.3.1  
・bash:4.4.12  
です．

お手数ですが，原因がわかる方がいらっしゃいましたらご回答いただけると幸いです．  
それではよろしくお願いします．


CC BY-SA 3.0
2018-01-23T17:16:53.673
41162
2018-12-08T07:43:06.667
27121
question
bash zsh
jobsコマンドのzshとbashでの動作の違いについて


詳細はよく読んでいませんが、 `setopt monitor` を実行すると、期待する動作になります。参考:
<https://unix.stackexchange.com/a/227411/157713>

[code]

    #!/bin/zsh
    
    setopt monitor
    
    for i in {1..10}; do
        sleep 1 &
        jobs | wc -l
        jobs
    done
    # => wc の結果はジョブの個数が表示される
    
[/code]


CC BY-SA 4.0
2018-12-08T06:40:41.923
51026
2018-12-08T07:43:06.667
2018-12-08T07:43:06.667
754
754
41162
answer