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

相关内容