Como obter o comando não encontrado resposta no script no Ubuntu 16.04

1

Estou começando com o script no Ubuntu. É muito fácil e bom de fazer. No meu shell script, eu preciso executar alguns comandos linux para alterar o diretório, ou para remover arquivos ou copiar arquivos ou qualquer outro comando. Então, eu estava apenas querendo saber se é possível obter o comando não encontrado notificação no script de modo que, se qualquer comando falhar a qualquer momento, podemos mostrar a mensagem de erro no terminal para o usuário.

Eu pesquisei um pouco sobre isso no google e descobri que usando abaixo podemos ler a resposta do terminal:

fooVar=$(ls)
echo "Response: $fooVar"

Então, acima eu estou executando o comando ls , então no terminal parece algo:

Response:
folder1
folder2
file1
file2

Mas se eu fizer algo como

fooVar=$(lsv)
echo "Response: $fooVar"

Isso me dá erro lsv command not found , o que é ok porque lsv não é um comando, mas essa string deve vir assim

Response: lsv command not found

Isso é possível ou estou indo para o caminho errado? Também como podemos colocar uma condição if para esse erro. Por favor ajude. Obrigado

    
por S Andrew 31.01.2017 / 10:09

2 respostas

2

O erro

  

comando lsv não encontrado

é enviado para stderror , enquanto a saída normal é enviada para stdout . Você terá que redirecionar stderror para stdout :

$ fooVar=$(lsv 2>&1)
$ echo "Response: $fooVar"
Response: -bash: lsv: command not found

Isso é quase o que você deseja, execute para o -bash:

Stdout tem o filedescriptor 1 e stderr tem o descritor 2. Então, o que eu digo é 'enviar stderr para o mesmo lugar que stdout'. Você poderia usar algo semelhante para colocar saída ou erros em arquivos:

ls > outfile 2> errorfile

Colocará a saída normal em um arquivo chamado 'outfile' e eventuais erros no 'errfile'.

ls >> outfile 2>> errorfile

Será anexado aos arquivos em vez de redefini-los. E você pode usar apenas um ou outro redirecionamento.

    
por Soren A 31.01.2017 / 10:18
1

Tente isto:

fooVar="lsv"
echo -n "Response "; echo '$fooVar'
    
por Artex 31.01.2017 / 10:37