Search code examples
linuxbashxargs

Using xargs to run multiple commands


Using this post as a starting point I am running the following in bash:

seq 1 5 | xargs -d $'\n' sh -c 'for arg do echo $arg; done'

Expected output

1
2
3
4
5

Actual output

2
3
4
5

i.e. is missing the first of the intended arguments.

Am probably being a tool, but wondering why this is.


Solution

  • You have to pass some dummy value at position 0 to sh script like this:

    seq 1 5 | xargs -d $'\n' sh -c 'for arg do echo $arg; done' _
    1
    2
    3
    4
    5
    

    Without passing _ to sh script 1 is passed as $0 whereas for arg loops through positional arguments starting with position 1 only.