chdir (< adresář >) nezmění ' po ukončení do shellu

Chtěl jsem vytvořit jednoduchý program C, který by se změnil do mého adresáře projektu. Jeho obsah je následující:

#include <unistd.h> int main() { chdir("/home/enedil/projects/algo"); return 0; } 

Zkompiloval jsem to pomocí následujícího příkazu (pro.c je název souboru):

gcc pro.c -o /usr/local/bin/pro 

Nebyly zjištěny žádné chyby ani varování. Ale když to spustím, ne změní adresář. Proč?

Komentáře

  • Místo toho můžete použít alias – alias proj='cd ~/enedil/projects/algo'
  • @MichaelDurrant oh, měli jste na mysli cd ~/projects/algo? Je to nápad!
  • Toto je záměrné!

Odpověď

Váš program dělá přesně to, co mu říkáte: mění pracovní adresář samotného na /home/enedil/projects/algo. Jakmile ale skončí, pracovní adresář prostředí je obnoven.

Myslím, že chcete k dosažení je změna pracovního adresáře nadřazeného procesu, tj. shellu, aniž by se uchýlilo k jednoduchému cd. Existuje a metoda , ale jak říká její autor: nedělej to.

Komentáře

  • Nitpick, ale shell ' není obnoven, protože se nikdy nezměnil. ' Shell je prostě proces, stejně jako program. Každý program má ' vlastní pracovní adresář.
  • @Patrick, true. Koncepčně přesnější by byl váš pracovní adresář je obnoven, protože váš proces je " obnoven " (je aktivní v popředí).

Odpověď

Aktuální pracovní adresář je v procesu lokální. To, co chcete, tedy není možné.

Odpověď

Můžete také použít CDPATH proměnná prostředí. Jak je vysvětleno v man bash:

 CDPATH The search path for the cd command. This is a colon-separated list of directories in which the shell looks for destination directories specified by the cd command. A sample value is ".:~:/usr". 

Takže například můžete přidat tento řádek do svého ~/.profile:

CDPATH=~/projects 

Nyní můžete spustit cd projects z libovolného adresáře a přesunout to ~/projects.

Odpovědět

Chcete-li to provést pro shell, použijte source příkaz (alias .). Spustí aplikaci v kontextu aktuálního prostředí, místo aby vytvořil nový kontext prostředí. Takto můžete také nastavit proměnné prostředí. Pokud si všimnete všech spouštěcích skriptů v /etc/rc.d nebo /etc/init.d, uvidíte spoustu skriptů, které jsou součástí jiných skriptů s tímto příkazem

. /etc/init.d/rcvars 

. způsobí, že skript /etc/init.d/rcvars tak něco změny v aktuálním prostředí přetrvávají.

Komentáře

  • Nelze ' spustit program C. tímto způsobem pouze shell skript.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *