I think that the problem here is that Dash is running “jobs | wc -l” and 
“jobs | cat” in subshells.  These subshells have no stopped jobs or running 
background jobs to report, which is why the output of jobs is empty.

If in Dash you run:

    sleep 10 &
    jobs

you will get the output you are expecting from jobs, but if you run:

    sleep 10 &
    (jobs)

(which puts jobs in a subshell), you will get no output.

The Single Unix Specification states,¹ “Additionally, each command of a 
multi-command pipeline is in a subshell environment; as an extension, however, 
any or all commands in a pipeline may be executed in the current environment.”  
This shows that merely putting jobs into a pipeline *could* cause it to be in 
a subshell.

The Dash man page states, “Note that unlike some other shells, each process in 
the pipeline is a child of the invoking shell (unless it is a shell builtin, 
in which case it executes in the current shell -- but any effect it has on the 
environment is wiped).”  As jobs is a shell builtin (so says “type jobs”), it 
ought to execute in the current shell, and so shouldn’t it report stopped and 
background jobs of the shell containing the pipeline?  I’m not sure, so I’m 
going to leave this bug open for someone else to decide.

However, if you want to make your shell script POSIX-compliant and therefore 
portable, then you presumably shouldn’t rely on the behaviour that you were 
expecting.  I don’t know what the best workaround here would be, but *one* 
workaround would be to use “>”-redirection to write from jobs to a temporary 
file which you could then grep and line-count: this alone wouldn’t create a 
multi-command pipeline.

In any case, I wouldn’t expect Bash in its default mode necessarily to behave 
the same as Dash, which aims to be POSIX compliant.  Bash when started with 
the option --posix I *might* expect to behave the same as Dash.  In this case, 
it doesn’t, however: Bash gives the same output if you change the first line 
of your Bash script to “#!/bin/bash --posix”.

I hope some of the above helps!

    1.
http://www.opengroup.org/onlinepubs/000095399/utilities/xcu_chap02.html#tag_02_12

-- 
jobs command in dash doesn't work with pipes in scripts
https://bugs.launchpad.net/bugs/243406
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.

-- 
ubuntu-bugs mailing list
ubuntu-bugs@lists.ubuntu.com
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to