Benutzerdefiniertes Shell-Skript kann nicht gefunden werden

Ich verwende MacOSX Sierra und habe es homebrewinstalliert. Also versuche ich, compress-slide.shein Skript unter zu erstellen ~/bin. Damit ich Symlinks loswerden kann, habe ich das ~/binin meinem Pfad hinzugefügt, sodass mein Pfad jetzt so aussieht:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:~/bin

Ich habe den Pfad unter eingestellt /etc/pathsund so sieht er aus:

/usr/local/bin
/usr/bin
/bin
/usr/local/sbin
/usr/sbin
/sbin
~/bin

Aber wenn ich es versuche which compress-slide.sh, wird nichts gefunden, es gibt mir nicht den Pfad, den ich erwarte, was bedeutet, dass ~/bin/compress-slide.shich dieses Skript nur verwenden möchte, wenn ich mich in verschiedenen Verzeichnissen befinde. Außerdem habe ich sichergestellt, dass ich der Besitzer des Skripts bin und dass es die Ausführungsberechtigung hat.

-rwxr-xr-x  1 dummyuser  dummyuser   135B Dec 28 18:13 compress-slide.sh

Hier ist der Inhalt meines Skripts, nur ein einfacher Befehl, um zu testen, ob es funktioniert;

#!/usr/bin/env bash

echo 'test'

Hier ist meine homebrewKonfig:

HOMEBREW_VERSION: 1.1.5
ORIGIN: https://github.com/Homebrew/brew
HEAD: 9cd5a21b473f0271b162bbe7f77f7d1468c0cfa1
Last commit: 2 weeks ago
Core tap ORIGIN: https://github.com/Homebrew/homebrew-core
Core tap HEAD: 797542c1bf61c4cfc58c7a52a2534d154cc584d1
Core tap last commit: 8 days ago
HOMEBREW_PREFIX: /usr/local
HOMEBREW_REPOSITORY: /usr/local/Homebrew
HOMEBREW_CELLAR: /usr/local/Cellar
HOMEBREW_BOTTLE_DOMAIN: https://homebrew.bintray.com
CPU: octa-core 64-bit ivybridge
Homebrew Ruby: 2.0.0-p648
Clang: 8.0 build 800
Git: 2.10.1 => /Applications/Xcode.app/Contents/Developer/usr/bin/git
Perl: /usr/bin/perl
Python: /usr/bin/python
Ruby: /usr/bin/ruby => /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/ruby
Java: 1.8.0_60, 1.7.0_79
macOS: 10.12.2-x86_64
Xcode: 8.2.1
CLT: N/A
X11: N/A

Liegt das an einem HomebrewKonflikt mit meinem Setup? Ist das auch jemandem begegnet?

Nein, es liegt daran, dass Sie ein ~in Ihrem PATH haben. Bitte verwenden Sie /Users/YOURUSERNAME/binstattdessen.
@Patrix Vielen Dank! Ich habe es einfach geschrieben und es funktioniert!
Bitte fügen Sie der Frage keine Antwort hinzu.

Antworten (2)

Dein Problem hat nichts mit Faulheit zu tun. Die Anwendung path_helper verhindert die Tilde- und Variablenerweiterung. Hier ist eine modifizierte /private/etc/pathsDatei.

/usr/local/bin
/usr/bin
/bin
/usr/sbin
/sbin
~/bin
$HOME/local/bin

Die path_helperAnwendung erstellt eine auszuwertende Zeichenfolge unter /private/etc/profileVerwendung der aktuellen PATH-Variablen zusammen mit den aufgelisteten Verzeichnissen /private/etc/pathsund Dateien darin /private/etc/paths.d.

/usr/libexec/path_helper -s
PATH="/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:~/bin:\$HOME/local/bin"; export PATH;

Die doppelten Anführungszeichen um die Variable PATH verhindern die Erweiterung der Tilde und der Backslash vor dem Dollarzeichen verhindert die Erweiterung der Variable $HOME.

Super, ich denke, das beantwortet die Frage direkt. Danke!
Gut gemacht und ausgezeichnete Antwort auf die direkte Ursache der Pfadschmerzen. + viele Stimmen hoffe ich.

Ich würde die Skripte, die Sie platzieren, aus dem Pfad zu /usr/local/bin symbolisch verlinken, damit Sie nicht mit der Erweiterung ~ in .dot-Dateien für Ihre Shell argumentieren müssen.

Es ist möglich, einen dauerhaften Weg zu finden, um sicherzustellen, dass Ihre Umgebung für ~ eingerichtet ist - aber ich bin ein Fan von absoluten Pfaden, um Probleme zu vermeiden, wenn Sie mit anderen Benutzern in Kontakt kommen und Kreuzkontaminationen in der Umgebung sowie Probleme wie Sie haben su.

Hier geht es nicht um homebrew- rein um bashoder was auch immer Sie für eine Shell verwenden.

auch - Entschuldigung dafür, dass Sie im Grunde gesagt haben: "Tu das, was du oben gesagt hast, was du nicht tun wolltest", indem du Sym-Links hinzufügst - aber sie sind wirklich nützlich für den Fall, den du oben erwähnt hast. Mein Verdacht ist, dass Patrix oder ein anderer Ihnen eine richtige Antwort geben wird, anstatt meinen Rat, auf diese zu setzen. : - )
Vielen Dank! Ich denke, ich sollte aufhören, faul zu sein und den Weg buchstabieren, wenn ich kann.
Nur eine Folgefrage: Wie würden Sie einen ganzen Ordner symbolisch verknüpfen, zum Beispiel mit, /Users/username/binwie /usr/local/binSie es vorgeschlagen haben? Ich weiß, dass ich das kann, ln -s /Users/username/bin/* /usr/local/binaber das Problem bei diesem Ansatz ist, dass ich es jedes Mal tun müsste, wenn ich ein neues Skript habe?
Keine Möglichkeit, das zu tun, Sie müssten ein Skript erstellen, um den Ordner zu durchlaufen und nach Bedarf zu verknüpfen / zu bereinigen. In diesem Fall ist das Festlegen des Pfads wahrscheinlich den Schmerz für diesen Fall wert.
hmm, wenn das der Fall ist, würde ich wahrscheinlich dabei bleiben, mein Zuhause binin den Pfad aufzunehmen. .dotIch kann mit den darin enthaltenen Dateien umgehen, vorausgesetzt, es handelt sich nur um einzelne .DS_StoreDateien. Nochmals vielen Dank für Ihre Hilfe.