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
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.
alias proj='cd ~/enedil/projects/algo'
cd ~/projects/algo
? Je to nápad!