Execute o comando em um subshell:
(ud) > file.txt 2>&1
Isto terá os comandos no alias ud
para executar em um subshell e o STDOUT e STDERR de todos os comandos serão direcionados para o shell pai para que possamos redirecionar o STDOUT e o STDERR de todos os comandos para o mesmo arquivo de nosso shell pai de uma vez.
Ou como @steeldriver sugeriu que você também poderia definir o alias da seguinte forma para que todos os comandos fossem agrupados e seus STDOUT e STDERR fossem redirecionados de uma só vez:
alias ud='{ sudo apt-get update && sudo apt-get upgrade -y && sudo apt-get dist-upgrade -y && sudo apt-get clean -y ;}'
Agora você pode executar o comando como:
ud > file.txt 2>&1
Agora, vamos entender o que você estava fazendo de errado:
Você definiu o alias como:
alias ud='sudo apt-get update && sudo apt-get upgrade -y && sudo apt-get dist-upgrade -y && sudo apt-get clean -y'
Agora, enquanto você corre:
ud > file.txt 2>&1
Somente o STDOUT e (ou) STDERR do último êxito ou falha são redirecionados para file.txt
, todos os comandos anteriores são executados e, dependendo do código de saída desse comando (success &&
), o próximo comando será executado. Portanto, no seu caso, todos os comandos foram bem-sucedidos e, como sudo apt-get clean -y
remove todos os arquivos .deb
de /var/cache/apt/archives
silenciosamente sem mostrar nenhum STDOUT, você está recebendo um arquivo vazio.