GNU/Linux >> Tutoriales Linux >  >> Linux

¿Ejecutar un comando usando argumentos que provienen de una matriz?

Supongamos que tengo un programa gráfico llamado app . Ejemplo de uso:app -t 'first tab' -t 'second tab' abre dos 'pestañas' en ese programa.

La pregunta es:¿cómo puedo ejecutar el comando (es decir, app ) desde dentro de un bash script si el número de argumentos puede variar?

Considere esto:

#!/bin/bash
tabs=(
    'first tab'
    'second tab'
)

# Open the app (starting with some tabs).
app  # ... How to get `app -t 'first tab' -t 'second tab'`?

Me gustaría que la secuencia de comandos anterior tuviera un efecto equivalente a app -t 'first tab' -t 'second tab' . ¿Cómo se puede escribir un script bash de este tipo?

Editar:tenga en cuenta que la pregunta se refiere a la composición de argumentos de línea de comandos sobre la marcha utilizando una matriz de argumentos.

Respuesta aceptada:

Dar los argumentos de una matriz es fácil, "${array[@]}" se expande a las entradas de la matriz como palabras distintas (argumentos). Solo necesitamos agregar el -t banderas Para hacer eso, podemos recorrer la primera matriz y construir otra matriz para la lista completa de argumentos, agregando -t banderas a medida que avanzamos:

#!/bin/bash
tabs=("first tab" "second tab")
args=()
for t in "${tabs[@]}" ; do 
    args+=(-t "$t")
done
app "${args[@]}"

Usa "[email protected]" en lugar de "${tabs[@]}" para tomar los argumentos de la línea de comandos del script en lugar de una lista codificada.


Linux
  1. ¿Ejecutar un comando que está sombreado por un alias?

  2. ¿Cómo crear una matriz de elementos únicos a partir de una cadena/matriz en Bash?

  3. Ejecute el comando en varios servidores Linux desde Windows

  4. Usando el comando passwd desde dentro de un script de shell

  5. Argumentos de la línea de comando para ejecutar la ventana acoplable

Cómo ejecutar comandos desde la entrada estándar usando Tee y Xargs en Linux

Comparta archivos a través de Internet desde la línea de comandos usando Transfer.sh

Cómo ejecutar un comando periódicamente en Linux usando Watch

Cómo quitar líneas de un archivo usando el comando Sed

Googler:ejecuta búsquedas en Google desde la línea de comandos

Ejecute procesos en segundo plano en Linux usando el comando Pantalla