Esto debería funcionar:
./program `cat file`
Si desea el contenido completo del archivo en un solo argumento, agregue comillas dobles (probado en bash. Creo que puede variar de shell a shell):
./program "`cat file`"
Comando
./program "$(< file)"
Explicación
-
$(cmd)
ejecuta un comando y convierte su salida en una cadena.$(cmd)
también se puede escribir con acentos graves como`cmd`
. Prefiero el nuevo$(cmd)
ya que encaja mejor que los acentos graves de la vieja escuela. -
El comando que queremos es
cat file
. Y luego desde la página man de bash:El comando sustitución
$(cat file)
puede ser reemplazado por el equivalente pero más rápido$(< file)
. -
Las comillas a su alrededor aseguran que se conserven los espacios en blanco, en caso de que tenga espacios o saltos de línea dentro de su archivo. Citar correctamente las cosas en scripts de shell es una habilidad que hace mucha falta. Citar variables y sustituciones de comandos es un buen hábito para que no se muerda más tarde cuando los nombres de los archivos o los valores de las variables tienen espacios o caracteres de control u otras rarezas.
Puedes usar uno de:
./program $(cat file)
./program "$(cat file)"
Este último es útil si puede haber varias palabras en el archivo y desea que se traten como un solo argumento. En cualquier caso, prefiero el uso if $()
a acentos graves simplemente debido a su capacidad para anidar (que probablemente no sea un requisito en este caso).
También tenga en cuenta que esta respuesta (y otras) están más relacionadas con el shell en uso que con el propio Linux. Dado que el predominante
shell parece ser bash
, he codificado específicamente para eso.
En realidad, esta es una forma bastante común de matar procesos bajo los parecidos de UNIX. Un demonio (como cron
) escribirá su ID de proceso en un archivo (como /var/cron.pid
) y puedes señalarlo con algo como:
kill -HUP $(cat /var/cron.pid)