Параметр 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=barusual.

Если контекст — документация, может быть полезно хотя бы упомянуть соответствующие короткие параметры, поскольку их короче писать, и ваши читатели в любом случае могут наткнуться на них в коде, написанном другими. Особенно для распространенных параметров, таких как wget -O.

(* Например, попробуйте ls --color=autoвместо 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

Связанный контент