Эволюция с GnuPG: `нет импортированного открытого ключа`, даже если он импортирован

Вывод xtrace идет в stderr до оценки команды, включая перенаправления.

Так в:

set -x # or set -o xtrace
echo test 2> file

Команда + echo test идет туда, куда шел stderr, затем оболочка открывает файл на fd 2 и затем запускает echo test. Если вы хотите, чтобы + echo test отправился в file, вам нужно:

{ echo test; } 2> file

В этот раз перенаправление выполняется для группы команд, а затем оценивается команда echo test+ echo test записывается в stderr, который в этот момент отправляется в file).

Обратите внимание, что некоторые оболочки, такие как AT&T ksh, также будут выводить + 2> file. Это также ошибочно в некоторых версиях mksh.

Это также означает, что stderr любой команды, запущенной внутри этой группы команд, будет идти в файл. Чтобы обойти это, вам нужно:

set -x
{
  cmd 2>&3 3>&-
} 3>&2 2> file

То есть сохранить копию оригинального stderr (на fd 3) и восстановить его для команд внутри группы команд.

В bash альтернативой является использование специальной переменной $BASH_XTRACEFD:

exec 7> file
BASH_XTRACEFD=7

set -x
echo test

Если вам нужен красивый xtrace вывод, попробуйте zsh. Также обратите внимание, что его можно настроить с помощью специальной переменной $PS4.

1
04.11.2017, 13:24
1 ответ

Включение Always trust keys in my keyring for encryptingрешило проблему для меня.

1
25.03.2021, 15:26

Теги

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