Wenn ich egxc kompiliere von:
GCC x.c -o x
Um das Ergebnis auszuführen, muss ich schreiben:
./x
Und einfach tippen:
x
Schlägt mit dieser Meldung fehl:
x: Befehl nicht gefunden
Dies bedeutet, dass Linux das aktuelle Verzeichnis nicht danach durchsucht! Gibt es (ich bin sicher, dass es das gibt) ein vernünftiges Problem hinter diesem Verhalten?
Antworten:
Da sich das aktuelle Arbeitsverzeichnis standardmäßig nicht in der
PATH
Variablen befindet.Dies ist eine Sicherheits- / Komfortmaßnahme. Wenn Sie Binärdateien / Scripts aufgerufen zB
cd
,ls
usw. in Ihrem aktuellen Arbeitsverzeichnis, wäre es sehr ärgerlich, wenn sie standardmäßig ausgeführt wurde.quelle
cd
inbash
, führt er eine Routine intern bash und nicht/bin/cd
) , wenn Sie prepend mit `.`sl
hast du das gleiche Problem. Es sollten nur vertrauenswürdige Verzeichnisse sein$PATH
und relative Pfade wie.
sind nie ein vertrauenswürdiges Verzeichnis für eine interaktive Shell.rm -r target
als ich meinte,rm -f target
gibt es normalerweise keinen Unterschied. Wenn ich tippe,rm -f target
wenn ich es gemeint haberm -r target
, gibt es entweder keinen Unterschied oder die Entfernung schlägt fehl. Darüber hinaus denke ich jedes Mal vor dem Typ Irm
, vor allem , wenn ich hinzufüge-f
oder-r
oder ein glob - es ist ein gefährlicher Befehl durch seine Natur. Niemand denkt nach, bevor er gehtls
.Dies bedeutet, dass sich das aktuelle Verzeichnis nicht in der Variablen $ PATH befindet.
quelle
Sie können dies beheben, indem Sie der
PATH
Umgebungsvariablen das aktuelle Verzeichnis (dargestellt durch einen einzelnen Punkt) hinzufügen .Die Vorgehensweise hängt von der verwendeten Shell ab.
Wenn Sie bash verwenden, können Sie die Zeile
export PATH=$PATH:.
zur.bashrc
Datei in Ihrem Home-Verzeichnis hinzufügen .Wenn Sie csh oder tcsh verwenden, fügen Sie die Zeile
set PATH = ($PATH .)
zur Datei .cshrc in Ihrem Home-Verzeichnis hinzu.IMHO, für einen Heim-Desktop-Computer ist dies eine akzeptable Sache - sicherheitstechnisch.
quelle