Вывод перенаправления на полпути через сценарий, и восстанавливает позже

Я имел ту же проблему и решил ее путем добавления к моему ~/.xinitrc этой строки:

export CLICOLOR=TRUE
2
23.01.2014, 23:25
2 ответа

Используйте exec встроенный с перенаправлением, но никакой командой для перенаправления дескрипторов файлов оболочки. Если Вы хотите восстановить исходное место назначения, необходимо будет сохранить его в другом дескрипторе.

exec 3>&1 >foo.txt
for x in *; do
  print $x
done
exec >&3 3>&-

Когда объемом перенаправления является часть кода, более просто поместить перенаправление вокруг той части кода.

for x in *; do
  print $x
done >foo.txt

Если Вы хотите применить перенаправление к последовательности инструкций, поместите его в фигурных скобках.

{
  for x in *; do
    print $x
  done;
  echo 'one more line'
} >foo.txt

Эти конструкции существуют во всех оболочках Bourne/POSIX-style, не только в zsh.

5
27.01.2020, 21:54
  • 1
    С примечанием, которое в Оболочке Bourne, перенаправляя составную команду вызывает подоболочку, таким образом, она раньше была желательна использовать exec 3>&1... там. Не больше с современными оболочками. –  Stéphane Chazelas 24.01.2014, 01:47
  • 2
    Документы о перенаправлениях IO для Bash: tldp.org/LDP/abs/html/io-redirection.html –  slm♦ 24.01.2014, 11:12

Можно перенаправить вывод for достаточно легко с:

for foo in list; do
    somethingto $foo
done > /path/to/forloop_log.txt

Это только перенаправит вывод for цикл и не вывод влияния прежде или после него.

Можно выполнить то же самое для в значительной степени любой команды или набора команд при помощи подоболочки:

dosomething
( dosomethingelse; doyetanotherthing; ) > /path/to/special.log
dostillanotherthing
1
27.01.2020, 21:54

Теги

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