Às vezes, quando eu executo comandos, ele não exibe uma saída, então não tenho certeza se eles funcionaram ou não. É possível fazer com que todos os comandos tenham feedback se eles foram executados corretamente ou não? Ou, no mínimo, para exibir o ID do feedback que eles executaram (corretamente ou não)
command-line
rajlego
fonte
fonte
cryptsetup
pode , por padrão, pular algumas mensagens de erro. É uma coisa boa de ter$?
no seuPS1
. O próximo passo é adicionar a hora atual, bem como, sempre saber horários dos comandos;)Respostas:
(Acho que desde que você está postando no Ask Ubuntu , podemos assumir que você está falando sobre o shell padrão, ou seja, o Bash .)
Há uma resposta muito boa na pergunta Stack Overflow Em um script de shell: os comandos echo shell são executados (esta não é apenas uma solução específica do Ubuntu).
O que você precisa fazer é usar o comando set para ativar o detalhado ou o xtrace.
vai lhe dar uma lista de quais parâmetros atuais são mudou para on ou off .
ou a versão longa:
vai virar detalhado ON .
Eu acho que o que você quer, na verdade, é xtrace. Isso não apenas ecoará todos os comandos executados, mas também expandirá os parâmetros e fornecerá mais feedback. Portanto, se eu fizer algo tolo como digitar 'oi' no terminal, receberei o eco do que digitei, bem como um relatório / rastreio do que o shell fez para tentar executar o comando 'oi' (veja a captura de tela abaixo) ):
Para ativar o xtrace:
ou:
Para desativar esses parâmetros, você (contra-intuitivamente) chama os mesmos comandos, exceto com um símbolo de mais + em vez de um traço ou um símbolo de menos, portanto, por exemplo:
desativará o verbose da mesma forma:
desativará o xtrace .
Um guia detalhado sobre opções de shell está no Capítulo 33. Opções, Guia Avançado de Script de Bash .
fonte
whoami >/dev/null
.Para verificar se algum comando funcionou com êxito ou não, você pode verificar o status de retorno , fornecido por
$?
, do comando anterior com:Um status de retorno
0
significa que o comando foi concluído com êxito, enquanto uma saída diferente de zero ( código de erro ) significaria que foram encontrados alguns problemas ou que há um erro e a categoria pode ser conhecida no código de erro. Os códigos de erro do Linux / C são definidos em/usr/include/asm-generic/errno-base.h
e/usr/include/asm-generic/errno.h
.Também no bash,
.bashrc
define um aliasalert
que pode ser usado para notificar o status de conclusão. Você precisaria anexar o alias com o comando ou combinação de comandos desta forma:Você pode anexar a seguinte linha de código ao seu
~/.bashrc
arquivo para exibir o status de retorno do último comando executado.(abra o arquivo
~/.bashrc
com o editor de texto de sua escolha e copie a linha acima, cole-a no arquivo e salve. Inicie uma nova instância do terminal e você deverá tê-la em ação. Ou então, pode definir alguma função e usar comPS1
como como ilustrado abaixo.)uma pequena demonstração:
Apenas brincando com
PS1
:) ..um pouco mais,(você pode modificar a função para torná-la mais sofisticada, algo como o @gronostaj faz em seu post.)
fonte
PS1
. Este é o uso que eu, com número vermelho em caso de erros, nada extra se último comando foi bem sucedido:\[\033[01;41;37m\]${?#0}\[\033[00;01;36m\] \u@\h:\w\[\033[00m\]\$
~/.bashrc
arquivo de origem ?^_^
pelo sucesso e um vermelhox_x
por qualquer outra coisa.Você pode alterar seu prompt de comando para exibir um sinal de visto verde quando o comando anterior sair com 0 e X vermelho caso contrário. O Arch Linux Wiki possui um bom código para adicionar ao seu
bash.rc
:(Desativei o código de erro real porque não gosto dele, se você quiser ver os códigos exatos, basta remover
#
desta linha#PS1="$White\$? "
:)Veja como fica:
fonte
Sim , é possível obter feedback para cada comando que você executou no terminal. Ele funciona com base no
echo $?
qual retorna 0 para uma conclusão bem-sucedida do comando e qualquer outro valor diferente de 0 para falha.Para obter feedback de êxito ou falha, adicione a linha abaixo ao
~/.bashrc
arquivo.E, em seguida,
~/.bashrc
arquivo de origem para fazê-lo funcionar.Explicação:
Para cada comando que você executou no terminal, esse
;if [[ $? == 0 ]]; then tput setaf 6 && echo SUCCESS; tput sgr0; else tput setaf 1 && echo FAILURE; tput sgr0; fi;
código será automaticamente vinculado a ele.Exemplo:
fonte
bind 'RETURN: " && echo SUCCESS || echo FAILED \n"'
também fará o mesmo, você não precisa verificar[[ $? == 0 ]]
explicitamente.