Как использовать пробел в разделе формата даты annotate-output?

2379
Vajk Hermecz

Я пытаюсь использовать annotate-output (часть пакета devscripts) для префикса выходных данных скрипта с датой и некоторой дополнительной информацией. Первый параметр может быть строкой формата, переданной на сегодняшний день. Я хочу включить пробел в эту строку формата, однако, будучи новичком в bash, я понятия не имею, как избежать пробела, чтобы правильно отправить его на дату. Перепробовал кучу вариантов, но похоже что неважно что я предоставляю, sys просто ест это ...

Источник аннотирования-вывода можно найти ЗДЕСЬ .

user@host:/home/user$ annotate-output '+myscript: %H:%M:%S' echo "A" date: extra operand `%H:%M:%S' Try `date --help' for more information. I: Started echo A date: extra operand `%H:%M:%S' Try `date --help' for more information. O: A date: extra operand `%H:%M:%S' Try `date --help' for more information. I: Finished with exitcode 0 

Ожидаемый результат:

myscript: 14:04:16 I: Started echo A myscript: 14:04:16 O: A myscript: 14:04:16 I: Finished with exitcode 0 
1

2 ответа на вопрос

1
glenn jackman

Unfortunately that script has some quoting issues. It will work if you add this function to the code:

date () { command date "$*" } 

Actually you don't need to alter the source. Do this: define the "date" function and export it:

$ date() { command date "$*"; } $ export -f date $ annotate-output "+foo %T" bash -c "echo stdout; echo stderr >&2" foo 10:38:30 I: Started bash -c echo stdout; echo stderr >&2 foo 10:38:30 E: stderr foo 10:38:30 O: stdout foo 10:38:30 I: Finished with exitcode 0 

There might be problems if the thing you're annotating also calls date.


If you care to fix annotate-output on your system, apply this diff

$ diff /usr/bin/annotate-output bin/annotate-output 28c28 < echo "`date $` $1: $line" --- > printf "%s %s: %s\n" "$(date "$FMT")" "$1" "$line" 78c78 < echo "`date $` I: Started $@" --- > addtime I <<< "Started $*" 83c83 < echo "`date $` I: Finished with exitcode $EXIT" --- > addtime I <<< "Finished with exitcode $EXIT" 
Я ищу, где подать отчет об ошибке ... glenn jackman 10 лет назад 0
Есть ли причина, по которой вы выбрали дату команды "$ *" вместо даты команды "$ @"? Просто любопытно, так как я обнаружил, что проблемы с цитированием, как правило, меньше, если вы используете $ @ Wally 10 лет назад 0
`" $ @ "` - это когда вы хотите передать аргументы другой программе, сохраняя при этом внутренний пробел. `" $ * "` - это когда вы хотите объединить все аргументы в одну строку, что мы и делаем здесь. glenn jackman 10 лет назад 1
1
webKnjaZ

It will work if you quote parameter properly:

annotate-output '+"myscript: %H:%M:%S"' echo "A" 

date command's format argument starts with +. That's right. But in order to pass space into it you should wrap all chars after + with quotes. Otherwise it will accept symbols which are following the whitespace as second command line argument.

Да, хотя мой пример полностью не избежал, я попробовал эту версию и сломал аннотированный вывод. Ты это пробовал? Если да, не могли бы вы предоставить некоторые подробности о версии аннотированного вывода, которую вы использовали? Спасибо Vajk Hermecz 10 лет назад 0

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