sh -c 'env HOME=$(mktemp -d) fish'
) ?versión de pescado instalada ( fish --version
) : 2.4.0
OS / terminal utilizado : OSX 10.12.2 (16C67) / iTerm2 Build 3.0.13
Digamos que tengo un script simple que solo genera sus argumentos. Podría verse algo como esto:
#!/usr/bin/env ruby
p ARGV
y su ejecución se ve así:
> ./myscript.rb foo 'hello world'
["foo", "hello world"]
Observe cómo "hola mundo" se agrupa como un argumento frente a "hola" y "mundo" son argumentos separados.
Ahora, quiero escribir una función de pescado que me permita ejecutar cualquier comando de pescado arbitrario (incluidos los alias) con algunas vars ENV configuradas.
Este es mi primer intento de tal función.
function debug
set -xg DEBUG 1
eval $argv
set -e DEBUG
end
Esto es lo que sucede cuando ejecuto mi script desde arriba a través de esta función:
> debug ./myscript.rb foo 'hello world'
["foo", "hello", "world"]
Observe que el único argumento de "hola mundo" se convirtió en "hola" y "mundo", que no es lo que quería.
También probé el siguiente enfoque:
env DEBUG=1 fish -c "$argv"
Lo que produjo el mismo resultado.
¿Hay alguna forma de hacer que la función $argv
preserve la agrupación "hola mundo"? ¿Qué me estoy perdiendo?
Este es un problema con eval
, no con "$ argv" en particular.
eval
analiza sus argumentos como si fueran dados en la línea de comandos, y no le importa cómo se dividen los argumentos.
Hemos tenido un problema con esto antes, pero el consenso fue que no podemos cambiar eval ahora, y que podría complicar otras cosas.
Lo que estamos tratando de hacer saber es en # 154 - hacer command
y aceptar variables.
Eso significaría que podría agregar command $argv
, y lo ejecutaría como espera.
Tenga en cuenta que actualmente puede usar string escape
, es decir, eval (string escape -- $argv)
.
Gracias. (string escape -- $argv)
funcionó.
Comentario más útil
Tenga en cuenta que actualmente puede usar
string escape
, es decir,eval (string escape -- $argv)
.