Halusin tehdä yksinkertaisen C
-ohjelman, joka vaihtaisi projektihakemistooni. Sen sisältö on seuraava:
#include <unistd.h> int main() { chdir("/home/enedil/projects/algo"); return 0; }
Käännin sen seuraavalla komennolla (pro.c
on sen tiedostonimi):
gcc pro.c -o /usr/local/bin/pro
Ei virheitä eikä varoituksia. Mutta kun suoritan sen, se ei muuta hakemistoa. Miksi?
Kommentit
Vastaa
Ohjelmasi tekee juuri sen, mitä käsket tehdä: se muuttaa -hakemiston itse muotoon /home/enedil/projects/algo
. Mutta kun se poistuu, -kuoren ”s -työhakemisto palautetaan.
Luulen mitä haluat saavuttaa on muuttaa pääprosessin työkansiota eli kuorta käyttämättä yksinkertaista cd
. On olemassa a method , mutta kuten kirjoittaja sanoo: älä tee sitä.
Kommentit
- Nitpick, mutta komentotulkki ' työhakemistoa ei palauteta, koska se ei koskaan muuttunut. Kuori on yksinkertaisesti prosessi, aivan kuten ohjelma on. Jokaisella ohjelmalla on ' oma työhakemisto.
- @Patrick, true. Käsitteellisesti tarkempi olisi työhakemistosi palauttaminen siinä tapauksessa, että prosessisi on " palautettu " (on aktiivinen etualalla).
Vastaus
Nykyinen työkansio on paikallinen prosessille. Joten mitä haluat, ei ole mahdollista.
Vastaa
Voit myös käyttää CDPATH
ympäristömuuttuja. Kuten selitettiin kohdassa 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".
Joten voit esimerkiksi lisätä tämän rivin ~/.profile
:
CDPATH=~/projects
Voit nyt suorittaa cd projects
mistä tahansa hakemistosta ja siirtää ~/projects
.
Vastaa
Voit tehdä tämän kuorelle käyttämällä source
-komento (aliakseksi .
). Se ajaa sovellusta nykyisen kuoren yhteydessä sen sijaan, että luo uuden kuoren kontekstin. Näin voit asettaa myös ympäristömuuttujia. Jos huomaat kaikki käynnistyskomentosarjat /etc/rc.d
tai /etc/init.d
, näet paljon komentosarjoja, jotka muut komentosarjat sisältävät komennossa
. /etc/init.d/rcvars
.
aiheuttaa komentosarjan /etc/init.d/rcvars
niin, että kaikki muutos jatkuu nykyisessä ympäristössä.
Kommentit
- Voit ' t ajaa C-ohjelmaa tällä tavalla vain komentosarja.
alias proj='cd ~/enedil/projects/algo'
cd ~/projects/algo
? Se on idea!