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 문자 또는 알파벳 문자일 수 있음)로 시작하고 문자, 십진수 및 밑줄로만 구성됩니다.

일부 쉘 rc에서는 변수 이름의 es모든 문자를 선호하거나 허용합니다( =( 및 NUL 제외).rc

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

bash, yash일부 버전 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.

관련 정보