Como dizer ao comando "cat" para não esperar quando não há caminho fornecido?

Como dizer ao comando "cat" para não esperar quando não há caminho fornecido?

Estou simplesmente tentando fazer com que um script bash
retorne o conteúdo de um arquivo de texto.

#!/bin/bash
cat $1

o problema é .. quando o caminho para um arquivo não é alimentado para este script bash ... como ele se fechará.

porque via linha de comando normal... se não houver nenhum caminho de arquivo sendo alimentado para o comando cat... ele não desliga.

quase como se estivesse esperando por alguma coisa.

Responder1

#!/bin/bash
if [[ "$#" -ne 1 ]]; then
    echo "Usage: $0 [INPUT FILE]" 1>&2
    exit 1
fi
cat "$1"

Responder2

Seu comando também tem outro problema, e se o nome do arquivo tiver espaços?

#!/bin/bash
cat "$1"

Sempre cite, a menos que você tenha um motivo convincente para não fazê-lo. E cat ""não trava. Em vez disso, produziria uma mensagem de erro como "Esse arquivo ou diretório não existe".

Responder3

catirá ignorar STDINse você fornecer um nome de arquivo. Conectar STDIN-se /dev/nullseria uma solução válida neste contexto.

$ cat test.sh
#!/bin/bash
cat $1 < /dev/null
$ ./test.sh test.sh
#!/bin/bash
cat $1 < /dev/null
$ ./test.sh
$

A desvantagem desta abordagem é que ela retornará 0se nenhum nome de arquivo for fornecido. Não há como evitar isso. A falha ao abrir o arquivo especificado ainda retornará falha.

Responder4

Para exibir o conteúdo do arquivo somente se o arquivo existir:

#!/bin/bash
[ -f "$1" ] && cat "$1"

Este script assume que o primeiro argumento é o arquivo que você desejacat

informação relacionada