Do you know the printf
trick in shell?
Shell printf
repeats its format pattern if you give it more arguments than the pattern has.
You can use this for all kinds of tricks:
$ printf "/some/path/%s " file1 file2 file3 file4
/some/path/file1 /some/path/file2 /some/path/file3 /some/path/file4
$ printf "%s=%s\n" a 1 b 2 c 3 d 4
a=1
b=2
c=3
d=4
It’s is really nice when you combine it with some other output:
$ printf -- "-p %s " $(ps aux | grep fcgiwr[a]p | f 2)
-p 10613 -p 10615 -p 10616 -p 10617 -p 10619 -p 10620 -p 10621 -p 10622 -p 10623
Say I wanted to pass all the pids of a program that forks a lot to strace
. I could do:
strace $(printf -- "-p %s " $(ps aux | grep fcgiwr[a]p | f 2))
An aside, you may have noticed that non-standard f
command in the ps
pipeline. I got that from here a long time ago (2008 according to the file’s timestamp) and it’s really fantastic—perfect for all sorts of unixy things that output tables (ps
, ls -l
, etc).