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 lftp
variáveis de configuração, variáveis definidas lftp
no lftp
prompt da CLI ou em lftp
arquivos de configuração, não têm nada a ver com qualquerconcha(a menos que você queira lftp
se 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 rc
ou es
permitem qualquer caractere (exceto =
(para rc
) e NUL) no nome da variável:
; a:b = c
; echo $'a:b'
c
bash
, yash
e algumas versões de zsh
permitem 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 bash
e 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á lftp
o que não mapeia variáveis de ambiente para suas variáveis de configuração AFAIK).
Para definir essas lftp
variá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
.