所以遠端傳輸協定使用一些奇怪的 shell 變量,如下所示:
xfer:log-file = 1
sftp:connect-program = “ssh -a -x -i keyfile”
我將如何設定這些變數?我嘗試過使用set
, 和env
;以及直接xfer:log-file=1
- 但這些似乎都不起作用。
任何幫助,將不勝感激 :)
答案1
這些不是 shell 變量,它們是配置變量,是在CLI 提示符或配置文件中lftp
設置的變量,它們與任何lftp
lftp
lftp
殼(除非您想將lftp
自己視為 shell,因為它在某種程度上是類別 shell 語言的解釋器,甚至可以使用其!
運算子執行命令(儘管它依賴真正的 shell))。
如果您希望使用相同的名稱定義 shell 變數(但為什麼要這樣做?),請注意大多數 shell 對於變數名稱可以包含的字元有很多限制。
對於大多數 shell,變數名稱以字母或底線開頭(可以是 ASCII 字母或字母字符,由某些 shell 中的區域設定定義),並且僅包含字母、十進制數字和底線。
有些 shell 喜歡rc
或允許變數名稱中包含es
任何字元(除了=
(for ) 和 NUL):rc
; a:b = c
; echo $'a:b'
c
bash
,yash
並且某些版本zsh
允許在您的語言環境中將字符分類為字母順序,因此您可以通過:
構建一個被分類為字母順序的自定義語言環境來欺騙這些 shell 接受作為有效的變量名稱字符:
,但這將是一個相當糟糕的主意,並且一定會破壞東西(例如在and${var:something}
中已經有特殊含義)。bash
zsh
現在環境變數名可以包含除 NUL 和 之外的任何字元=
。因此,您可以將環境變數傳遞給包含:
或 的命令-
:
$ env foo:bar=baz printenv foo:bar
baz
但請注意,shell(除rc
/es
之外)將無法使用它們,某些 shell 甚至可能會將它們從環境中刪除(這不會影響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
.