Вызов просто 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
Выполните команду в подоболочке:
(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 Вы получали пустой файл.