Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
4.1k views
in Technique[技术] by (71.8m points)

linux - 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 $'
' 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.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

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

seq 1 5 | xargs -d $'
' 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.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...