Я изучаю программирование на bash через книгу, и теперь я изучаю открытие файлов и файловых дескрипторов, но я не могу заставить этот код работать (см. Ниже), я хочу использовать файловый дескриптор 4
для записать вывод нижнего цикла while в файл somefile24.log
, но somefile24.log
будет пустым после запуска кода.
Вот код:
#!/bin/bash
#
# openFile.sh: print the contents of orders.txt
shopt -s -o nounset
declare LINE
exec 3< orders.txt
while read LINE <&3
do
printf "%s\n" "$LINE"
done
echo
echo "Here is the new part of the program!"
exec 4> somefile24.log
count=1
while read LINE <&3
do
printf "%s-----count=%d\n" "$LINE" "$count" >&4
let count++
done
exit 0
Вот вывод:
(something78@notemDEB78)-(01:45:03)-(~/Bash_Programming_2018)
$./openFile.sh
something and something and something
something and something and something
something and something and something
something and something and something
something and something and something
something and something and something
something and something and something
something and something and something
something and something and something
something and something and something
something and something and something
something and something and something
something and something and something
something and something and something
something and something and something
something and something and something
something and something and something
something and something and something
something and something and something
something and something and something
something and something and something
something and something and something
something and something and something
something and something and something
something and something and something
something and something and something
something and something and something
something and something and something
Here is the new part of the program!
Ожидаемый результат:
Сценарий записывает содержимое orders.txt в somefile24.log
Я пытался проверить код в shellcheck , но он не видит проблему и только дает мне это:
$ shellcheck myscript
Line 10:
while read LINE <&3
^-- SC2162: read without -r will mangle backslashes.
Line 22:
while read LINE <&3
^-- SC2162: read without -r will mangle backslashes.
Line 25:
let count++
^-- SC2219: Instead of 'let expr', prefer (( expr )) .
Я пытался сделать тест в командной строке:
(something78@notemDEB78)-(01:59:41)-(~/Bash_Programming_2018)
$exec 3>somefile24.log
(something78@notemDEB78)-(01:59:59)-(~/Bash_Programming_2018)
$echo testing >&3
(something78@notemDEB78)-(02:00:03)-(~/Bash_Programming_2018)
$cat somefile24.log
testing
Я знаю, что я могу просто сделать:
while
printf "%s\n" "$LINE" >> somefile24.log
ВОПРОС:
Можно ли использовать файловый дескриптор для записи в файл, подобный этому, в цикле, и если да, то как и что я делаю неправильно?
А почему somefile24.log
всегда пусто после запуска скрипта?