GNU/Linux >> Tutoriales Linux >  >> Linux

Usando Linux, ¿cómo puedo pasar el contenido de un archivo como parámetro a un ejecutable?

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

  1. $(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.

  2. 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) .

  3. 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)

Linux
  1. Cómo usar el comando Tar en Linux

  2. Cómo extraer el archivo tar.gz en Linux usando la línea de comandos

  3. ¿Cómo puedo aleatorizar las líneas en un archivo usando herramientas estándar en Red Hat Linux?

  4. ¿Cómo puedo contar la cantidad de carpetas en una unidad usando Linux?

  5. ¿Cómo puedo editar todos los archivos devueltos por find in vi en Linux?

Cómo extender el espacio de intercambio usando el archivo de intercambio en Linux

Cómo hacer un archivo ejecutable en Linux

Cómo monitorear cambios de archivos usando fswatch en Linux

Cómo enumerar el contenido de un paquete en Linux

Cómo ver el contenido de un archivo o archivo comprimido en Linux

Cómo borrar de forma segura un disco y un archivo usando el comando shred de Linux