wget 的 --output-document= 選項在包含 ~ 字元時失敗

wget 的 --output-document= 選項在包含 ~ 字元時失敗

我編寫文檔,所以我更喜歡使用長選項,因為它是自我描述的。--output-document=比他的簡短等價物更具可讀性-O

然後,我必須在主目錄中指定一個文件,但是~當我嘗試時該字元失敗了--output-document=~/.vimrc

我確實需要使用一個長選項,但我還需要指示一個自動包含主目錄的路徑。

那麼,有一個解決方案不使用像/home/<your name>/?這樣的語法。

答案1

波形符擴充僅適用於單字的開頭。 (至少在 bash 中,參見例如https://www.gnu.org/software/bash/manual/html_node/Tilde-Expansion.html

--something=$HOME/filename如果您只需要引用目前使用者的主目錄,則可以使用。由於--output-document採用強制參數,因此將參數寫入單獨的選項也可以工作,但對於可選參數,它似乎不起作用(*),因此您可能通常希望使用該--foo=bar格式。

如果上下文是文檔,那麼至少提及相應的簡短選項可能會很有用,因為它們寫起來較短,而且您的讀者可能會在其他人編寫的程式碼中偶然發現它們。特別是對於像wget -O.

(* 例如, try ls --color=autovs ls --color auto。我說“似乎”,因為我能找到的最直接的提及是命令行程序的手冊頁getopt,庫文檔不太清楚。)

答案2

據我所知,“=”不應該在那裡......

wget --option-document ~/.vimrc

答案3

我不會在文件中使用,也不會在“憤怒”中使用,但如果你真的想要波浪號,你執行下列任一操作

VAR=~/.vimrc; wget ... --output-document="$VAR" 
unset VAR # to keep things tidy
# or put in ( subshell ) to keep pre-existing VAR 
# quotes only needed if $HOME (or anything you substitute for .vimrc)
# can contain whitespace or glob characters ?*[ which is pretty rare

wget ... --output-document="$(echo ~/.vimrc)"
# or if $HOME can begin with - or contain backslash, also pretty rare:
wget ... --output-document="$(printf '%s\n' ~/.vimrc)"
# both times quotes as above

相關內容