¿Cómo pasar todos los argumentos de bash a bash -c dentro de la sustitución de comandos?
Estoy tratando de pasar argumentos de script condicionalmente a bash - c
, que a su vez es pasado a un comando docker run
. El ejemplo a continuación ilustra lo que estoy tratando de hacer.
#!/bin/bash
echo "Args: ${@}"
docker run ubuntu \
$(if [[ ! -z ${@} ]]; then echo "bash -c ${@}"; fi)
docker run ubuntu \
$(if [[ ! -z ${@} ]]; then echo "bash -c \"${@}\""; fi)
Para una llamada ./myscript.sh ls -la
, esto me da la siguiente salida.
Args: ls -la
bin
boot
dev
etc
home
lib
lib32
lib64
libx32
media
mnt
opt
proc
root
run
sbin
srv
sys
tmp
usr
var
-la": -c: línea 0: EOF inesperado mientras buscaba una coincidencia de "'
-la": -c: línea 1: error de sintaxis: fin de archivo inesperado
Como puede ver, la primera llamada de docker run
funciona, pero ignora la bandera -la
que también se ha pasado. Pensé en tratar de encerrar el comando pasado a bash -c
, a saber, ls -la
, entre comillas escapadas, pero esto no funciona en absoluto.
¿Cómo puedo lograr el comportamiento deseado? ¡Gracias de antemano!
davy.ai
Para pasar condicionalmente los argumentos de un script a
bash -c
, el cual a su vez se pasa a un comandodocker run
, puede intentar las siguientes opciones:Opción 1:
Esto debería permitir pasar todos los argumentos del script a
bash -c
encerrados entre comillas simples. La salida debería verse como algo así:Opción 2:
Esto utiliza la opción
-it
para ejecutar el contenedor en modo interactivo y la opción--rm
para eliminar el contenedor una vez que sale. La opción-c
se utiliza para pasar el comando abash
y${@}
se utiliza para pasar todos los argumentos del script. La salida debería verse como algo así:Nota: Asegúrese de escapar correctamente cualquier carácter especial que pueda causar problemas al pasar los argumentos del script a
bash -c
dentro del comandodocker run
.