콜론(:)과 대시(-)가 포함된 bash 설정 변수(lftp에서 사용됨)

콜론(:)과 대시(-)가 포함된 bash 설정 변수(lftp에서 사용됨)

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

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

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

bash, yash일부 버전의 zsh문자는 로케일에서 알파벳순으로 분류되도록 허용하므로 가 알파벳순으로 분류되는 :사용자 정의 로케일을 구성하여 해당 쉘을 속여 유효한 변수 이름 문자로 허용할 수 있지만 :이는 다소 나쁜 생각입니다. 확실히 깨뜨려야 합니다(예를 들어 및 ${var:something}에는 이미 특별한 의미가 있습니다 ).bashzsh

지금환경변수 이름에는 NUL 및 =. 따라서 :또는 다음을 포함하는 명령에 환경 변수를 전달할 수 있습니다 -.

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

그러나 쉘( rc/ 제외 es)은 이를 사용할 수 없으며 일부 쉘은 환경에서 이를 제거할 수도 있습니다( lftp환경 변수를 구성 변수 AFAIK에 매핑하지 않는 것에 영향을 미치지 않습니다).


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.

관련 정보