
Ich habe Folgendes versucht:
export PATH=>>-
$HOME/.cargo/bin:
$HOME/.bkaradzic/bx/tools/bin/linux:
$HOME/.bkaradzic/bimg/tools/bin/linux:
$HOME/.dotnet:
$HOME/.android-ndk-r17b:
$PATH
export PATH=${PATH//$'\r'/}
export PATH=${PATH//$'\n'/}
export PATH=${PATH//$'\x20'/}
Und weiterhin
-bash: /home/hydroper/.cargo/bin:: No such file or directory
-bash: /home/hydroper/.bkaradzic/bx/tools/bin/linux:: No such file or directory
-bash: /home/hydroper/.bkaradzic/bimg/tools/bin/linux:: No such file or directory
-bash: /home/hydroper/.dotnet:: No such file or directory
-bash: /home/hydroper/.android-ndk-r17b:: No such file or directory
Irgendwelche Vorschläge?
Antwort1
Sie scheinen zu glauben, dass die erste Zeile eine Erweiterung des Pfads einleitet. Das stimmt nicht. Die erste Zeile ist ein vollständiger Befehl.
export PATH= >> -
Die obige Zeile, die zum besseren Verständnis mit einigen Leerzeichen geschrieben wurde, setzt PATH
auf eine leere Zeichenfolge und hängt die Ausgabe des Befehls an die Datei an -
.
Die folgende Zeile ist der nächste Befehl
$HOME/.cargo/bin:
Dies wird zu dem Namen eines Verzeichnisses erweitert, das wahrscheinlich auf Ihrem System existiert, plus dem Doppelpunkt. Das Ergebnis ist
-bash: /home/hydroper/.cargo/bin:
: Keine solche Datei oder kein solches Verzeichnis
Antwort2
Klingt, als ob Sie etwas möchten wie:
export PATH="$(paste -sd : - << EOF
$HOME/.cargo/bin
$HOME/.bkaradzic/bx/tools/bin/linux
$HOME/.bkaradzic/bimg/tools/bin/linux
$HOME/.dotnet
$HOME/.android-ndk-r17b
$PATH
EOF
)"
paste -s
ist der Befehl zum Verbinden aller Zeilen einer Datei (mit dem mit -d
; angegebenen Trennzeichen -
).tun Sie es für stdin statt für eine tatsächliche Datei, -
kann bei einigen Implementierungen weggelassen werden, aber das ist nicht Standard/portabel).
Um Ihre Frage zum Entfernen von Leerzeichen in ksh93
/ mksh
oder bash
zu beantworten zsh
:
PATH=${PATH//[[:space:]]}
würde alle Leerzeichen entfernen, auch ASCII-Zeichen, einschließlich des Zeilenumbruchzeichens. Die Liste der übereinstimmenden Zeichen hängt von der Ländereinstellung und dem System ab (beispielsweise enthalten nicht alle Systeme das geschützte Leerzeichen), aber alle ASCII-Zeichen (TAB, LF, VT, FF, CR, SPC) sind immer enthalten.
Um dieses Zeilenumbruchzeichen $PATH
überhaupt einzufügen, hätten Sie Folgendes benötigt:
export PATH="
$HOME/.cargo/bin:
$HOME/.bkaradzic/bx/tools/bin/linux:
$HOME/.bkaradzic/bimg/tools/bin/linux:
$HOME/.dotnet:
$HOME/.android-ndk-r17b:
$PATH"
>>
ist ein Ausgabeumleitungsoperator. Sie könnten ihn mit den Here-Doc-Operatoren oder verwechseln <<
. <<-
Aber selbst dann dienen <<
und <<-
zur Umleitung der Eingabe, sodass Sie ihn immer noch auf einen Befehl anwenden müssen, der seine Eingabe liest, wie paste
im obigen Beispiel, und Befehlssubstitution ( $(...)
im obigen Beispiel) verwenden müssen, damit die Ausgabe dieses Befehls als Argument an übergeben wird export
.
Beachten Sie, dass Sie auch Folgendes tun können:
export PATH="\
$HOME/.cargo/bin:\
$HOME/.bkaradzic/bx/tools/bin/linux:\
$HOME/.bkaradzic/bimg/tools/bin/linux:\
$HOME/.dotnet:\
$HOME/.android-ndk-r17b:\
$PATH"
Innerhalb von doppelten Anführungszeichen (und Sie benötigen die doppelten Anführungszeichen, damit diese $HOME
erweitert werden) können Sie \
am Ende der Zeile verwenden, um eine langelogischLinie in mehrerephysische. $PATH
würdenichtEnthält die \<newline>
Sequenz Zeichen für eine neue Zeile, wird sie entfernt.
Oder außerhalb der Anführungszeichen, wo ~
es erweitert wird (einschließlich nach :
„wenn“ in Zuweisungen) und \<newline>
auch entfernt wird:
PATH=\
~/.cargo/bin:\
~/.bkaradzic/bx/tools/bin/linux:\
~/.bkaradzic/bimg/tools/bin/linux:\
~/.dotnet:\
~/.android-ndk-r17b:\
$PATH
export PATH
(mit bash
würde export PATH=...
hier auch funktionieren, aber nicht in allen anderen Shells).
In zsh
könnten Sie Folgendes tun:
path=(
~/.cargo/bin
~/.bkaradzic/bx/tools/bin/linux
~/.bkaradzic/bimg/tools/bin/linux
~/.dotnet
~/.android-ndk-r17b
$path
)
oder
path[1,0]=(
~/.cargo/bin
~/.bkaradzic/bx/tools/bin/linux
~/.bkaradzic/bimg/tools/bin/linux
~/.dotnet
~/.android-ndk-r17b
)
wie in ist zsh
das $path
Arraygebundenzur $PATH
Variable wie in csh
oder tcsh
.