En general, para recorrer el argumento de la línea de comando en un script o función de shell, puede hacer
for thing do
commands using "$thing"
done
o
for thing in "$@"; do
commands using "$thing"
done
En este caso, suponiendo que los nombres de archivo proporcionados en la línea de comando no contengan saltos de línea literales, no hay necesidad de hacer un bucle de shell explícito para esto:
wc -l -- "$@" | sed -E '$d;s/^[[:blank:]]*([[:digit:]]*)[[:blank:]]*(.*)/\1 lines in \2/'
Esto tomaría todos los argumentos de la línea de comando y ejecutaría wc -l
en todos ellos.
La salida es analizada por sed
que descarta la última línea que contiene el número total de líneas en los archivos dados (usando$d
). El resto de la salida de wc -l
se transforma en la salida que desea capturando el número de líneas y el nombre del archivo y luego insertando la cadena lines in
en -en el medio.
Ejecutar el script con mis propios archivos .vimrc
, .profile
y .mailrc
devolverá
8 lines in.vimrc
8 lines in.profile
4 lines in.mailrc
Tenga en cuenta que wc -l -- "$@"
creará una salida como
8.vimrc
8.profile
4.mailrc
20 total
que en realidad puede ser suficiente para lo que desea, sin la necesidad de sed
.
Там не должно быть никакой разницы. >>
откроет fifo с флагом O_APPEND
, и это не должно иметь никакого значения для fifo или другого файла без -поиска.
Однако существуют интерфейсы с ошибками, такие как sendfile(2)
в Linux, которые не работают с файлами, открытыми в режиме O_APPEND
, и будут возражать даже против -доступных для поиска файлов, для которых установлен этот режим, так что вам лучше всегда использовать форму >
.