bash establece una variable con dos puntos (:) y un guión (-) (como lo usa lftp)

bash establece una variable con dos puntos (:) y un guión (-) (como lo usa lftp)

entonceslftputiliza algunas variables de shell extrañas, como las siguientes:

xfer:log-file = 1

sftp:connect-program = “ssh -a -x -i keyfile”

¿Cómo configuraría estas variables? Intenté usar set, y env; y también directamente xfer:log-file=1, pero ninguno de ellos parece funcionar.

Cualquier ayuda sería apreciada :)

Respuesta1

Esas no son variables de shell, son lftpvariables de configuración, variables configuradas lftpen el lftpindicador CLI o en lftparchivos de configuración, no tienen nada que ver con ningunacaparazón(a menos que quiera considerarse lftpun shell, ya que de alguna manera es un intérprete de un lenguaje similar a un shell e incluso puede ejecutar comandos con su !operador (aunque depende de un shell real para eso)).

Si desea que las variables del shell se definan con el mismo nombre (pero ¿por qué lo haría?), tenga en cuenta que la mayoría de los shells tienen muchas restricciones sobre los caracteres que puede contener el nombre de sus variables.

Para la mayoría de los shells, los nombres de las variables comienzan con una letra o un guión bajo (pueden ser letras ASCII o caracteres alfabéticos según lo definido por su configuración regional en algunos shells) y constan solo de letras, dígitos decimales y un guión bajo.

A algunos shells les gusta rco espermiten cualquier carácter (excepto =(para rc) y NUL) en el nombre de la variable:

; a:b = c
; echo $'a:b'
c

bashy yashalgunas versiones de zshpermiten caracteres clasificados como alfabéticos en su configuración regional, por lo que posiblemente podría engañar a esos shells para que acepten :como un carácter de nombre de variable válido construyendo una configuración regional personalizada donde :se clasifique como alfabético, pero eso sería una idea bastante mala y es seguro que rompe cosas (por ejemplo, ${var:something}ya tiene un significado especial en bashy zsh).

AhoraambienteLos nombres de variables pueden contener cualquier carácter excepto NUL y =. Entonces puedes pasar una variable de entorno a un comando que contenga :o -:

$ env foo:bar=baz printenv foo:bar
baz

pero tenga en cuenta que los shells (excepto rc/ es) no podrán usarlos y algunos shells pueden incluso eliminarlos del entorno (y eso no afectará lftpcuál no asigna variables de entorno a sus variables de configuración AFAIK).


Para configurar esas lftpvariables al inicio, puede hacer:

lftp -e 'set xfer:log-file transfer.log' sftp://server/

O incrustarlo en un script lftp para uso no interactivo:

lftp -c '
   set xfer:log-file transfer.log
   get https://unix.stackexchange.com/questions/240502'

O

#! /usr/bin/lftp -f
set xfer:log-file transfer.log
get https://unix.stackexchange.com/questions/240502

O puede agregar esas definiciones de variables a su archivo ~/.lftp/rc.

información relacionada