Alsolftpverwendet einige seltsame Shell-Variablen, wie die folgenden:
xfer:log-file = 1
sftp:connect-program = “ssh -a -x -i keyfile”
wie würde ich diese Variablen einstellen? Ich habe versucht set
, , und env
; sowie einfach direkt zu verwenden xfer:log-file=1
– aber nichts davon scheint zu funktionieren.
Ich bin für jede Hilfe dankbar :)
Antwort1
Das sind keine Shell-Variablen, sondern lftp
Konfigurationsvariablen, Variablen, die lftp
an der lftp
CLI-Eingabeaufforderung oder in lftp
Konfigurationsdateien festgelegt werden. Sie haben nichts mitHülselftp
(es sei denn, Sie möchten es als Shell betrachten , da es in gewisser Weise ein Interpreter für eine Shell-ähnliche Sprache ist und mit seinem !
Operator sogar Befehle ausführen kann (obwohl es dafür auf eine echte Shell angewiesen ist)).
Wenn Sie möchten, dass Shell-Variablen mit demselben Namen definiert werden (aber warum sollten Sie das tun?), beachten Sie, dass die meisten Shells viele Einschränkungen hinsichtlich der Zeichen haben, die der Name ihrer Variablen enthalten darf.
Bei den meisten Shells beginnen Variablennamen mit einem Buchstaben oder Unterstrich (in manchen Shells können es ASCII-Buchstaben oder alphabetische Zeichen sein, je nach der Definition Ihrer Region) und bestehen nur aus Buchstaben, Dezimalzahlen und dem Unterstrich.
Einige Shells mögen rc
oder es
erlauben jedes Zeichen (außer =
(für rc
) und NUL) im Variablennamen:
; a:b = c
; echo $'a:b'
c
bash
, yash
und einige Versionen von zsh
lassen Zeichen zu, die in Ihrer Region als alphabetisch klassifiziert sind. Sie könnten diese Shells also möglicherweise dazu austricksen, das :
Zeichen als gültigen Variablennamen zu akzeptieren, indem Sie eine benutzerdefinierte Region erstellen, in der :
als alphabetisch klassifiziert ist. Das wäre jedoch eine ziemlich schlechte Idee und würde mit Sicherheit Probleme verursachen (hat beispielsweise in und ${var:something}
bereits eine besondere Bedeutung ).bash
zsh
JetztUmfeldVariablennamen können alle Zeichen außer NUL und enthalten =
. Sie können also eine Umgebungsvariable an einen Befehl übergeben, der :
oder enthält -
:
$ env foo:bar=baz printenv foo:bar
baz
Beachten Sie jedoch, dass Shells (außer rc
/ es
) sie nicht verwenden können und einige Shells sie möglicherweise sogar aus der Umgebung entfernen (und dies hat lftp
meines Wissens nach keine Auswirkungen auf das Shell, das Umgebungsvariablen seinen Konfigurationsvariablen nicht zuordnet).
lftp
Um diese Variablen beim Start festzulegen , haben Sie folgende Möglichkeiten:
lftp -e 'set xfer:log-file transfer.log' sftp://server/
Oder betten Sie es zur nicht-interaktiven Verwendung in ein LFTP-Skript ein:
lftp -c '
set xfer:log-file transfer.log
get https://unix.stackexchange.com/questions/240502'
Oder
#! /usr/bin/lftp -f
set xfer:log-file transfer.log
get https://unix.stackexchange.com/questions/240502
Oder Sie können diese Variablendefinitionen zu Ihrem hinzufügen ~/.lftp/rc
.