Mudo mensagem de erro do sistema em um arquivo de script e exibir o meu

3

Eu criei um script simples para mover todos os arquivos com .sh suffix no diretório de trabalho atual para um diretório designado

Se não houver tal arquivo, o script deverá exibir apenas uma mensagem de erro que eu informei, não a mensagem de erro do sistema: mv: cannot stat ‘*.sh’: No such file or directory

Eu tentei adicionar ./shm 2> /dev/null após o comando mv que fez com que o script fosse executado sem parar!

Como posso silenciar a mensagem de erro do sistema?

#!/bin/bash

echo "Moving all script files to script directory..."
mv *.sh $HOME/linux/scripts
#./shm 2> /dev/null
if [ $? -ne 0 ]
 then
        echo "No files with .sh suffix"
fi
    
por Mohamed Ahmed 25.10.2014 / 12:06

4 respostas

1

O script abaixo deve ser útil, pois ajudará você a exibir suas mensagens de erro personalizadas.

#!/bin/bash

files=$(ls *.sh 2> /dev/null)

if [ -z "$files" ]
then
    echo "No script files found. Exiting.."
    exit
fi

echo "Moving all script files to script directory..."

for file in $files
do
    if ! mv $file $HOME/linux/scripts
    then
        echo "Unable to move file $file"
    fi
done 

Quando o script é executado, a lista de "*.sh" arquivos no diretório de trabalho atual dos scripts é atribuída à variável files .

Em seguida, fazemos uma verificação de integridade para ver se a variável $files está vazia. Se estiver vazio, significa que não há arquivos "*.sh" no diretório.

Se os arquivos existirem, o loop for itera sobre a variável $files e move cada arquivo. Se o comando mv falhar e o erro for impresso.

Para mais detalhes sobre for loop, consulte este documento.

    
por 25.10.2014 / 12:24
2

Eu acho que é errado matar a mensagem de erro. Quanto a mim, é muito melhor usá-lo para cheque.

#!/bin/bash

if ls *.sh &> /dev/null
then
  echo "Moving all script files to script directory..."
  mv -v -n *.sh $HOME/linux/scripts
else
  echo "No files with .sh suffix -- nothing to move"
fi
    
por 25.10.2014 / 12:51
1

Adicione 2>/dev/null ao seu comando mv para redirecionar o stderr para / dev / null:

mv *.sh $HOME/linux/scripts 2>/dev/null
    
por 25.10.2014 / 12:19
0

Em relação a outras soluções de Costas ou Kannan:

if ! mv $file $HOME/linux/scripts

deve ser substituído por

if ! mv "$file" "$HOME/linux/scripts/."

Adicione também esta linha em algum lugar no início do script

 mkdir -p "$HOME/linux/scripts"

Caso contrário, quando o linux / scripts estiver faltando, todos os arquivos serão movidos para lá como um arquivo e sobrescrevendo o anterior.

E se você tiver espaços em seus nomes de arquivos ou pastas, as citações serão necessárias.

    
por 25.10.2014 / 17:32