%20%E3%81%A8%E3%83%80%E3%83%83%E3%82%B7%E3%83%A5%20(-)%20%E3%82%92%E5%90%AB%E3%82%80%E5%A4%89%E6%95%B0%E3%82%92%E8%A8%AD%E5%AE%9A%E3%81%97%E3%81%BE%E3%81%99%20(lftp%20%E3%81%A7%E4%BD%BF%E7%94%A8%E3%81%95%E3%82%8C%E3%82%8B%E3%82%82%E3%81%AE%E3%81%A8%E5%90%8C%E3%81%98).png)
それでlftp次のような奇妙なシェル変数を使用します。
xfer:log-file = 1
sftp:connect-program = “ssh -a -x -i keyfile”
set
これらの変数をどのように設定すればよいでしょうか? 、 、env
; を使用したり、単に直接使用したりしてみましたxfer:log-file=1
が、いずれも機能しないようです。
ご協力いただければ幸いです:)
答え1
これらはシェル変数ではなく、 CLIプロンプトまたは設定ファイルでlftp
設定される設定変数であり、lftp
lftp
lftp
シェルlftp
(ただし、シェルのような言語のインタープリターであり、演算子を使用してコマンドを実行することもできるため、シェルとして考える場合は除きます!
(ただし、そのためには実際のシェルに依存します))。
シェル変数を同じ名前で定義したい場合 (しかし、なぜそうする必要があるのでしょうか?)、ほとんどのシェルでは変数名に含めることができる文字に関して多くの制限があることに注意してください。
ほとんどのシェルでは、変数名は文字またはアンダースコアで始まり (一部のシェルではロケールで定義されている ASCII 文字またはアルファベット文字を使用できます)、文字、小数点、アンダースコアのみで構成されます。
一部のシェルではrc
、変数名にes
任意の文字 ( および NUL を除く) を使用できます=
。rc
; a:b = c
; echo $'a:b'
c
bash
yash
および の一部のバージョンでは、ロケールzsh
でアルファベットとして分類される文字が許可されるため、 がアルファベットとして:
分類されるカスタム ロケールを作成することで、それらのシェルが を有効な変数名文字として受け入れるように:
仕向けることは可能ですが、これはむしろ悪い考えであり、確実に問題が発生します (たとえば、 は およびで${var:something}
既に特別な意味を持っています)。bash
zsh
今環境変数名には、NUL と 以外の任意の文字を含めることができます。したがって、または=
を含むコマンドに環境変数を渡すことができます。:
-
$ env foo:bar=baz printenv foo:bar
baz
ただし、シェル ( rc
/を除くes
) はそれらを使用できず、一部のシェルはそれらを environ から削除する可能性があることに注意してください (これは、lftp
環境変数をその構成変数にマップしない which には影響しません)。
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
。