Разница между > и >> при использовании с именованным каналом

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 -len todos ellos.

La salida es analizada por sedque 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 -lse transforma en la salida que desea capturando el número de líneas y el nombre del archivo y luego insertando la cadena lines inen -en el medio.

Ejecutar el script con mis propios archivos .vimrc, .profiley .mailrcdevolverá

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.

6
04.06.2019, 20:09
2 ответа

Там не должно быть никакой разницы. >>откроет fifo с флагом O_APPEND, и это не должно иметь никакого значения для fifo или другого файла без -поиска.

Однако существуют интерфейсы с ошибками, такие как sendfile(2)в Linux, которые не работают с файлами, открытыми в режиме O_APPEND, и будут возражать даже против -доступных для поиска файлов, для которых установлен этот режим, так что вам лучше всегда использовать форму >.

8
27.01.2020, 20:28

>перезаписывает файл назначения

>>добавляется к целевому файлу

Спасибо Джобину на AskUbuntu за авторитетный ответ с 45 лайками.

-3
27.01.2020, 20:28

Теги

Похожие вопросы