bash set variável com dois pontos (:) e traço (-) (como usado pelo lftp)

bash set variável com dois pontos (:) e traço (-) (como usado pelo lftp)

entãolftpusa algumas variáveis ​​de shell estranhas, como as seguintes:

xfer:log-file = 1

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

como eu definiria essas variáveis? Eu tentei usar set, e env; bem como direto xfer:log-file=1- mas nada disso parece funcionar.

Qualquer ajuda seria apreciada :)

Responder1

Essas não são variáveis ​​de shell, são lftpvariáveis ​​de configuração, variáveis ​​definidas lftpno lftpprompt da CLI ou em lftparquivos de configuração, não têm nada a ver com qualquerconcha(a menos que você queira lftpse considerar um shell, pois de alguma forma é um intérprete para uma linguagem semelhante a um shell e pode até executar comandos com seu !operador (embora dependa de um shell real para isso)).

Se você deseja que as variáveis ​​do shell sejam definidas com o mesmo nome (mas por que faria isso?), esteja ciente de que a maioria dos shells tem muitas restrições sobre quais caracteres o nome de suas variáveis ​​pode conter.

Para a maioria dos shells, os nomes das variáveis ​​começam com uma letra ou sublinhado (podem ser letras ASCII ou caracteres alfabéticos conforme definido pela sua localidade em alguns shells) e consistem apenas em letras, dígitos decimais e sublinhado.

Alguns shells gostam rcou espermitem qualquer caractere (exceto =(para rc) e NUL) no nome da variável:

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

bash, yashe algumas versões de zshpermitem caracteres classificados como alfabéticos em seu código de idioma, então você pode enganar esses shells para que aceitem :como um caractere de nome de variável válido, construindo um código de idioma personalizado onde :é classificado como alfabético, mas isso seria uma má ideia e é certifique-se de quebrar coisas (por exemplo, ${var:something}já tem um significado especial em bashe zsh).

Agoraambientenomes de variáveis ​​podem conter qualquer caractere, exceto NUL e =. Portanto, você pode passar uma variável de ambiente para um comando que contém :ou -:

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

mas observe que os shells (exceto rc/ es) não poderão usá-los e alguns shells podem até removê-los do ambiente (e isso não afetará lftpo que não mapeia variáveis ​​de ambiente para suas variáveis ​​de configuração AFAIK).


Para definir essas lftpvariáveis ​​na inicialização, você pode fazer:

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

Ou incorpore-o em um script lftp para uso não interativo:

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

Ou

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

Ou você pode adicionar essas definições de variáveis ​​ao seu arquivo ~/.lftp/rc.

informação relacionada