Мне удалось сделать это на FreeBSD и Вине 1.5.24 путем установки LC_ALL
и LANG
кому: ru_RU.UTF-8
. Обратите внимание, что это ru_RU.UTF-8
и нет ru_RU.utf8
, с более поздним существом недопустимое имя локали в моей системе, по крайней мере. Я предполагаю, что это может быть проблемой на другом *, ОТКЛОНЯЮТ системы, и в Вашем конкретном случае, также.
HTH
паста
был бы тому подобным образом сделать это. Но с дескрипторами Bash файла и замены процесса:
exec 3< <(cal 1 2015)
exec 4< <(cal 2 2015)
exec 5< <(cal 3 2015)
while IFS= read -r -u3 line1; do
IFS= read -r -u4 line2
IFS= read -r -u5 line3
printf "%-25s%-25s%-25s\n" "$line1" "$line2" "$line3"
done
exec 3<&-
exec 4<&-
exec 5<&-
January 2015 February 2015 March 2015
Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa
1 2 3 1 2 3 4 5 6 7 1 2 3 4 5 6 7
4 5 6 7 8 9 10 8 9 10 11 12 13 14 8 9 10 11 12 13 14
11 12 13 14 15 16 17 15 16 17 18 19 20 21 15 16 17 18 19 20 21
18 19 20 21 22 23 24 22 23 24 25 26 27 28 22 23 24 25 26 27 28
25 26 27 28 29 30 31 29 30 31
Вы могли бы использовать в пасте
для объединения вывода, а затем чтение в строках:
paste -d $'\n' <(foo) <(bar) <(cat baz) | while IFS= read -r line1
do
IFS= read -r line2 || break
IFS= read -r line3 || break
# ..
done
Это такая структура что тебе понадобится.
Вы были на правых линиях с вашим ФИФО, но причина CAL
, если вы читаете одну строку из этого, заключается в том, что линия чтения
Cal
.
# Create the FIFOs
mknod pipe1 p
mknod pipe2 p
mknod pipe3 p
# Start off the commands
command1 >pipe1 &
command2 >pipe2 &
command3 >pipe3 &
# Attach file descriptors to the other side of the FIFOs
exec 11<pipe1 12<pipe2 13<pipe3
# Loop
IS_MORE=0
while [[ 0 eq $IS_MORE ]]
do
IS_MORE=1
read LINE1 <&11 && IS_MORE=0
read LINE2 <&12 && IS_MORE=0
read LINE3 <&13 && IS_MORE=0
# ...
done
# Close descriptors and remove the FIFOs
exec 11<&- 12<&- 13<&-
rm -f pipe1 pipe2 pipe3
# Clean up the dead processes (zombies)
wait
# ...