Как упоминалось в комментариях, paste
— лучший вариант делать то, что вы хотите.
paste new_file.txt <sequence file>
Если вы хотите создать последовательность во время выполнения
seq 0 0.005 1 | paste new_file.txt /dev/stdin
Пример (для 5 записей вnew_file.txt
)
~$ seq 0 0.005 0.020 | paste new_file.txt /dev/stdin
2.41 0.000
2.56 0.005
2.71 0.010
2.86 0.015
3.01 0.020
Примечание. :Если в каком-либо файле/команде есть дополнительные строки, соответствующие строки в выводе будут пустыми. Поэтому убедитесь, что оба файла имеют одинаковое количество строк.
{ echo 'hello on fd3' >&3; } 3>&1 | cat
Здесь echo
пишет в стандартный вывод, но мы перенаправляем его в дескриптор файла 3 (это соответствует записи в w
, которую вы делаете в своем приложении Node ). Затем мы выводим поток файлового дескриптора 3 на стандартный вывод, чтобы иметь возможность отправить его по конвейеру в cat
.
Чтобы также отказаться от стандартного вывода:
{ echo 'hello on fd1'; echo 'hello on fd3' >&3; } 3>&1 1>/dev/null | cat
Первый echo
записывает в стандартный вывод, а второй записывает через перенаправление, как в первом примере, в файловый дескриптор 3. Затем файловый дескриптор 3 отправляется в стандартный вывод (, чтобы иметь возможность передавать его по конвейеру. )при отказе от стандартного вывода.
Обратите внимание, что 1
в 1>/dev/null
на самом деле не нужен и просто добавлен здесь для ясности.
Оба конвейера выводят только hello on fd3
.
Для вашего приложения Node:
node foo.js 3>&1 | cat
или, чтобы также отказаться от стандартного вывода,
node foo.js 3>&1 1>/dev/null | cat
или, для отправки стандартного вывода на стандартную ошибку (терминал по умолчанию ),
node foo.js 3>&1 1>&2 | cat
Вы можете сделать это без замены процесса и без смешивания fd 1 и 3 или fd 1 и 2:
producer(){ echo to_out; echo >&2 to_err; echo >&3 to_fd3; }
consumer(){ sed "s/^/consumer $@: /" >/dev/tty; }
{ producer 3>&1 >&4 | consumer 3; } 4>&1 | consumer 1
to_err
consumer 1: to_out
consumer 3: to_fd3
{ producer 3>&1 >&4 | consumer 3; } 4>&1
to_out
to_err
consumer 3: to_fd3
Не совсем канал через процесс -замена:
# cmd 3> >(cat)
Или, если вы можете смешивать вывод fd3 и stdout,
# cmd 3>&1 | cat
Итак, с bash это работает:
exec 3<> >(cat > temp.sh)
echo a >&3 # write to it
exec 3>&- # close fd 3.
но мне интересно, есть ли менее подробный способ сделать это. И обойтись без подмены процесса, вместо использования пайпов.