bashはコロン(:)とダッシュ(-)を使用して変数を設定します(lftpで使用されます)。

bashはコロン(:)とダッシュ(-)を使用して変数を設定します(lftpで使用されます)。

だからリモート転送プロトコル次のような奇妙なシェル変数を使用してください。

xfer:log-file = 1

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

この変数をどのように設定しますか?set、およびenv。を自分で試してみましたが、xfer:log-file=1どちらも機能しないようです。

どんな助けにも感謝します:)

答え1

これはシェル変数ではなく、構成変数、CLIプロンプト、または構成ファイルでlftp設定される変数であり、すべての変数と同じです。lftplftplftpシェル(自分をシェルと考えたくない場合は、lftpシェルに似た言語のソルバーであり、!演算子を使用してコマンドを実行することもできるからです(実際のシェルに依存しますが))。

同じ名前のシェル変数を定義する場合(なぜそうするのですか?)、ほとんどのシェルには変数名に含めることができる文字に多くの制限があることに注意してください。

ほとんどのシェルでは、変数名は文字またはアンダースコア(一部のシェルのロケールで定義されているようにASCII文字またはアルファベット文字のいずれか)で始まり、文字、10進数、および下線のみで構成されています。

一部のシェルrcでは、変数名のesすべての文字を優先または許可します(=およびNULを除く)。rc

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

bashyash一部のバージョンでは、zsh文字をロケールからアルファベット順に分類できるため、アルファベット順に分類されるカスタムロケールを:構築して、これらのシェルが文字を有効な変数名文字として受け入れるように欺くことができますが、:これは非常に悪い考えです。 (すでに特別な意味を持っているinのような)ものは間違いなく壊れます${var:something}bashzsh

環境変数名にはNULと=。したがって:、または以下を含むコマンドに環境変数を渡すことができます-

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

rcただし、/以外のシェルではesこれを使用できず、一部のシェルでは環境からそれらを削除することもできます(これは、lftp環境変数を構成変数にマップしない場合は影響しません)。


lftp起動時にこれらの変数を設定するには、次のようにします。

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

または、非対話型の使用のために lftp スクリプトに含めます。

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

または

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

またはこれらの変数定義を~/.lftp/rc

関連情報