¿Cómo decirle al comando "gato" que no se mantenga cuando no se proporciona una ruta?

¿Cómo decirle al comando "gato" que no se mantenga cuando no se proporciona una ruta?

Simplemente estoy intentando obtener un script bash
para devolver el contenido de un archivo de texto.

#!/bin/bash
cat $1

el problema es... cuando la ruta a un archivo no se envía a este script bash... ¿cómo se cerrará solo?

porque a través de la línea de comando normal... si no hay una ruta de archivo enviada al comando cat... no cuelga.

casi como si estuviera esperando algo...

Respuesta1

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

Respuesta2

Tu comando también tiene otro problema, ¿qué pasa si el nombre del archivo tiene espacios?

#!/bin/bash
cat "$1"

Cita siempre a menos que tengas una razón de peso para no hacerlo. Y cat ""no se cuelga. En su lugar, produciría un mensaje de error como "No existe tal archivo o directorio".

Respuesta3

catse ignorará STDINsi le proporciona un nombre de archivo. Conectarse STDINa /dev/nullsería una solución válida en este contexto.

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

La desventaja de este enfoque es que volverá 0si no se proporciona ningún nombre de archivo. No hay forma de evitar eso. Si no se abre el archivo especificado, se producirá un error.

Respuesta4

Para mostrar el contenido del archivo solo si el archivo existe:

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

Este script asume que el primer argumento es el archivo que deseacat

información relacionada