Следующее записывает первую строку ввода в файл foo
и выводит оставшуюся часть:
read line ; echo "$line" >> foo ; while read line ; do echo "$line" ; done
Проверка, например. вот так:
seq 0 9 | ( read line ; echo "$line" > foo ; while read line ; do echo "$line" ; done )
cat foo
Теперь вместо выполнения grep
непосредственно в xargs
выполните канал, который помещает выходные данные grep
через приведенный выше фрагмент. Это решает проблему xargs
конкатенации всего вывода.
Все это достаточно длинное, поэтому я бы подумал о том, чтобы поместить фрагмент в сценарий оболочки, особенно. если вы хотите контролировать имя файла.
Редактировать
Предполагается, что вы хотите записать пропущенную запись в файл, а остальные — в стандартный вывод, но, возможно, я вас неправильно понял.
I have to mention, that the umask is also set in /etc/profile for all accounts to 022.
Каждая оболочка, использующая /etc/profile, переопределяет маску umask, установленную pam_umask.so
. Таким образом, вы должны установить umask в /etc/profile также на 0077, если вы хотите общесистемную umask.