Die Option --output-document= von wget ist fehlgeschlagen, wenn das Zeichen ~ enthalten war.

Die Option --output-document= von wget ist fehlgeschlagen, wenn das Zeichen ~ enthalten war.

Ich schreibe eine Dokumentation und verwende daher lieber lange Optionen, da diese selbstbeschreibend sind und --output-document=sich besser lesen lassen als das kurze Äquivalent -O.

Anschließend muss ich eine Datei im Home-Verzeichnis angeben, allerdings ~schlägt beim Versuch das Zeichen fehl --output-document=~/.vimrc.

Ich muss wirklich eine lange Option verwenden, aber ich muss auch einen Pfad angeben, der automatisch das Home-Verzeichnis enthält.

Es gibt also eine Lösung, die keine Syntax wie /home/<your name>/? verwendet.

Antwort1

Die Tilde-Erweiterung funktioniert nur am Anfang eines Wortes. (Zumindest in Bash, siehe z. B.https://www.gnu.org/software/bash/manual/html_node/Tilde-Expansion.html)

Sie können es beispielsweise verwenden, --something=$HOME/filenamewenn Sie nur auf das Home-Verzeichnis des aktuellen Benutzers verweisen müssen. Da --output-documentein obligatorisches Argument verwendet wird, funktioniert es auch, das Argument in einer separaten Option zu schreiben, aber für optionale Argumente scheint es nicht zu funktionieren (*), daher möchten Sie wahrscheinlich --foo=barnormalerweise das Format verwenden.

Wenn es sich bei dem Kontext um Dokumentation handelt, kann es sinnvoll sein, zumindest auch die entsprechenden Kurzoptionen zu erwähnen, da diese kürzer zu schreiben sind und Ihre Leser sie ohnehin in von anderen geschriebenem Code finden könnten. Insbesondere bei allgemeinen Optionen wie wget -O.

(* Beispielsweise „try “ ls --color=autoim Vergleich zu ls --color auto„. Ich sagte „scheinbar“, da die direkteste Erwähnung hierzu, die ich finden kann, die Manpage des Kommandozeilenprogramms ist getopt; die Bibliotheksdokumentation ist nicht so klar.)

Antwort2

Soweit ich weiß, sollte das '=' da nicht stehen...

wget --option-document ~/.vimrc

Antwort3

Ich würde weder in der Dokumentation noch in 'in anger' verwenden, aber wenn Sie wirklich Tilde wollen,dürfentun Sie entweder

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

verwandte Informationen