Wie kann man mit /etc/paths.d einen Pfad mit Leerzeichen in $ PATH einfügen?

3

Ich habe VMware Fusion 10 kürzlich auf einem Mac installiert, auf dem macOS 10.12.6 ausgeführt wird. Danach ist mein Bash-Pfad unterbrochen. Ich habe das Problem auf eine von Fusion installierte /etc/paths.d -Pfaddatei zurückgeführt. Es enthält den folgenden Eintrag (ohne Zeilenumbruch):

/Applications/VMware Fusion.app/Contents/Public

Beachten Sie das Leerzeichen im Pfadnamen. Mit diesem Geschenk erhalte ich beim Starten einer Shell eine Fehlermeldung:

-bash: export: `Fusion.app/Contents/Public:/Library/TeX/texbin': not a valid identifier

Und mein resultierender PFAD ist beschädigt. Ich habe versucht, eine neue Zeile hinzuzufügen, den Pfad in doppelte Anführungszeichen zu setzen und einen Backslash vor das Leerzeichen zu setzen. Alle diese erzeugen einen Fehler (manchmal unterschiedliche Fehler). Wenn Sie beispielsweise den umgekehrten Schrägstrich oder den Zeilenumbruch in doppelte Anführungszeichen einfügen, tritt der gleiche Fehler auf. Beide Änderungen zusammen ergeben:

-bash: test: /Users/loredo/Library/Commands:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin:/Applications/VMware: binary operator expected
-bash: test: /Users/loredo/Library/Commands:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin:/Applications/VMware: binary operator expected
-bash: test: /usr/local/var/rbenv/shims:/Users/loredo/Library/Commands:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin:/Applications/VMware: binary operator expected
-bash: export: `Fusion.app/Contents/Public:/Library/TeX/texbin:.:/usr/texbin:/usr/local/cuda/bin': not a valid identifier

Ich fange an mich zu fragen, ob ich path_helpermöglicherweise nicht in der Lage bin, einen solchen Anwendungsfall zu behandeln. Gibt es eine Möglichkeit, damit umzugehen?

Tom Loredo
quelle
Mein /etc/paths.d/com.vmware.fusion.publicenthält /Applications/VMware Fusion.app/Contents/Publicund in Terminal- echo $PATHAusgaben: /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Applications/VMware Fusion.app/Contents/Public Ich habe kein Problem mit meinem PATHoder dem Ausführen von z. B. vmrun, das sich im /Applications/VMware Fusion.app/Contents/PublicVerzeichnis befindet, so dass der Speicherplatz kein Problem darstellt. Du PATHwirst woanders vermasselt! Haben Sie /etc/pathsein ~/.bash_profileoder geändert oder haben Sie ein oder hinzugefügt, ~/.profileund wenn ja, ändern Sie das PATHin einer dieser Dateien?
user3439894
Was ist im Terminal die Ausgabe von echo $PATH?
user3439894
Danke, @ user3439894, Ihre Vermutung war richtig. Eine alte Manipulation von PATH in meinem Profil auf diesem Computer war schuld. Das Update hat das Problem behoben. Wenn du dies als Antwort postest, werde ich es gerne auswählen.
Tom Loredo

Antworten:

1

Mein /etc/paths.d/com.vmware.fusion.publicenthält:

 /Applications/VMware Fusion.app/Contents/Public

Im Terminal werden folgende echo $PATHAusgänge ausgegeben:

/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Applications/VMware Fusion.app/Contents/Public

Ich habe kein Problem mit meinem PATHoder dem Ausführen von z. B. vmrun, das sich im /Applications/VMware Fusion.app/Contents/PublicVerzeichnis befindet, so dass der Speicherplatz kein Problem darstellt. Du PATHwirst woanders vermasselt!

Haben Sie /etc/pathsein ~/.bash_profileoder geändert oder hinzugefügt ~/.profile, und wenn ja, ändern Sie das PATHin einer dieser Dateien?

user3439894
quelle
Vielen Dank für die gute Detektivarbeit. Das Problem waren in der Tat einige alte Manipulationsfunktionen für .profile PATH. Einmal repariert, ist alles in Ordnung.
Tom Loredo
1

Also werde ich versuchen, diesem den alten College-Versuch zu geben. Nachdem ich ungefähr eine Stunde damit rumgespielt hatte, kam ich zu dem Schluss, dass path_helper- die native App, die eine PATHUmgebungsvariable erstellt /etc/pathsund/etc/paths.d nicht gut mit Pfaden funktioniert, die Leerzeichen enthalten, d. H. Deshalb erleben Sie Ihre aktuelle Situation.

Meine hackige Lösung, um dies zum Laufen zu bringen, ist es, einen Symlink zu erstellen aus:

/Applications/VMware Fusion.app

zu

/Applications/VMwareFusion.app

mit dem folgenden Befehl,

ln -sf /Applications/Vmware Fusion.app /Applications/VmwareFusion.app

Bearbeiten /etc/paths.d/com.vmware.fusion.publicund ändern Sie dann die eine Zeile in dieser Datei so, dass sie wie folgt aussieht:

/Applications/VMwareFusion.app/Contents/Public/

Dann natürlich eine neue Shell-Sitzung starten oder neu starten.

Diese Lösung eignet sich hervorragend für die Verwendung der Fischschale.

💩

ipatch
quelle
2
Vielen Dank für Ihre Eingabe, aber der Kommentar von @ user3439894 war richtig. Auf einem meiner Computer hatte ich ein .profile, das einige PATH-Manipulationsbefehle verwendete, die ich vor langer Zeit von Fink und anderswo abgerufen hatte. Es war einer dieser Befehle, der Schuld war. Das Ersetzen machte alles gut, obwohl es Leerzeichen in den Pfaden in PATH gibt. War also path_helpernicht schuld; Zumindest in meinem Fall werden Leerzeichen in Pfaden korrekt behandelt.
Tom Loredo