Ich wollte ein einfaches C
Programm erstellen, um in mein Projektverzeichnis zu wechseln. Sein Inhalt ist wie folgt:
#include <unistd.h>
int main()
{
chdir("/home/enedil/projects/algo");
return 0;
}
Ich habe es mit folgendem Befehl kompiliert ( pro.c
ist sein Dateiname):
gcc pro.c -o /usr/local/bin/pro
Es gab keine Fehler oder Warnungen. Aber wenn ich es ausführe, ändert es nicht das Verzeichnis. Warum?
process
c
cd-command
enedil
quelle
quelle
alias proj='cd ~/enedil/projects/algo'
cd ~/projects/algo
? Es ist eine Idee!Antworten:
Ihr Programm macht genau das, was Sie ihm sagen: Es ändert das Arbeitsverzeichnis für sich in
/home/enedil/projects/algo
. Nach dem Beenden wird das Arbeitsverzeichnis der Shell wiederhergestellt.Ich denke, was Sie erreichen möchten, ist, das Arbeitsverzeichnis des übergeordneten Prozesses, dh der Shell, zu ändern, ohne auf ein einfaches zurückzugreifen
cd
. Es gibt eine Methode , aber wie der Autor sagt: Tu es nicht.quelle
Das aktuelle Arbeitsverzeichnis ist lokal für den Prozess. Was Sie wollen, ist also nicht möglich.
quelle
Sie können auch die
CDPATH
Umgebungsvariable verwenden. Wie erklärt inman bash
:So können Sie beispielsweise diese Zeile zu Ihrem hinzufügen
~/.profile
:Sie können jetzt
cd projects
von jedem Verzeichnis aus ausführen und zu wechseln~/projects
.quelle
Verwenden Sie dazu den
source
Befehl (alias to.
) für die Shell . Die Anwendung wird im Kontext der aktuellen Shell ausgeführt, anstatt einen neuen Shell-Kontext zu erstellen. Auf diese Weise können Sie auch Umgebungsvariablen festlegen. Wenn Sie alle Startskripte in/etc/rc.d
oder bemerken/etc/init.d
, werden viele Skripte angezeigt, die in anderen Skripten mit dem Befehl enthalten sindDas
.
bewirkt, dass das Skript/etc/init.d/rcvars
so bleibt, dass alles, was es ändert, in der aktuellen Umgebung erhalten bleibt.quelle