Supongamos que tengo un script de shell bash llamado Myscript.sh
que necesita un argumento como entrada.
Pero quiero que el contenido del archivo de texto llamado text.txt
sea ese argumento.
He probado esto pero no funciona:
cat text.txt | ./Myscript.sh
¿Hay alguna forma de hacer esto?
Respuesta1
./Myscript.sh "$(cat text.txt)"
Respuesta2
Puede utilizar la salida de la tubería como argumento del script de shell.
Pruebe este método:
cat text.txt | xargs -I {} ./Myscript.sh {}
Respuesta3
Para completar @ bac0n, que en mi humilde opinión es el único que responde correctamente a la pregunta, aquí hay una breve línea que antepondrá argumentos canalizados a la lista de argumentos de su script:
#!/bin/bash
declare -a A=("$@")
[[ -p /dev/stdin ]] && { \
mapfile -t -O ${#A[@]} A; set -- "${A[@]}"; \
}
echo "$@"
Uso de ejemplo:
$ ./script.sh arg1 arg2 arg3
> arg1 arg2 arg3
$ echo "piped1 piped2 piped3" | ./script.sh
> piped1 piped2 piped3
$ echo "piped1 piped2 piped3" | ./script.sh arg1 arg2 arg3
> piped1 piped2 piped3 arg1 arg2 arg3