Как создать файл журнала из команды (через псевдоним)

Вызов просто ud введенный в терминале. ud определяется как следующее в моем ~/.bash_aliases:

alias ud='sudo apt-get update && sudo apt-get upgrade -y && sudo apt-get dist-upgrade -y && sudo apt-get clean -y'

После быстрого поиска я нашел следующий метод предложенным для поддержания файлов журнала (использование make install из исходного сообщения):

$ make install > file.txt 2>&1

Вот проблема; если я адаптирую это к своим потребностям, я не получаю ожидаемые результаты из следующего синтаксиса:

$ ud > file.txt 2>&1

То, что я получаю, - то, что команда выполняется к экранному stdout, и производится 0-байтовый текстовый файл. То, что я хочу выполнить, создают файл синтезируемого текста, подобный следующему для ls:

$ ls > file.txt 2>&1

Я могу попросить кого-то объяснять мне, что продолжается?

Наконец, следующее приводят к результатам, которые я не могу объяснить:

$ $(ud) > file.txt
La commande « Ign » est introuvable, vouliez-vous dire :
 La commande « tgn » du paquet « tgn » (universe)
Ign : commande introuvable

$ echo $(ud) > file.txt
1
задан 2 May 2015 в 15:34

1 ответ

Выполните команду в подоболочке:

(ud) > file.txt 2>&1

Это будет иметь команды в псевдониме ud работать в подоболочке и STDOUT и STDERR всех команд будет направлено к родительской оболочке так, чтобы мы могли перенаправить STDOUT и STDERR всех команд в тот же файл от нашей родительской оболочки сразу.

Или поскольку @steeldriver предположил, что Вы могли также установить псевдоним как после того, так, чтобы все команды группировались и их STDOUT, и STDERR будет перенаправлен сразу:

alias ud='{ sudo apt-get update && sudo apt-get upgrade -y && sudo apt-get dist-upgrade -y && sudo apt-get clean -y ;}'

Теперь можно выполнить команду как:

ud > file.txt 2>&1

Теперь, позволяет, получают то, что Вы делали неправильно:

Вы установили псевдоним как:

alias ud='sudo apt-get update && sudo apt-get upgrade -y && sudo apt-get dist-upgrade -y && sudo apt-get clean -y'

Теперь, поскольку Вы работаете:

ud > file.txt 2>&1

Только STDOUT последней успешной или неудавшейся команды и (или) STDERR перенаправляется к file.txt, все предыдущие команды выполняются и в зависимости от кода выхода той команды (успех &&) следующая команда будет работать. Так, в Вашем случае все команды, за которыми следуют и как sudo apt-get clean -y удаляет весь .deb файлы от /var/cache/apt/archives тихо не показывая STDOUT Вы получали пустой файл.

2
ответ дан 7 December 2019 в 13:58

Другие вопросы по тегам:

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