chdir (< hakemisto >) ei muuta ' t muuta hakemistoa poistuttuaan shellistä

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

  • Voit käyttää sen sijaan aliasta – alias proj='cd ~/enedil/projects/algo'
  • @MichaelDurrant Voi, tarkoititko cd ~/projects/algo? Se on idea!
  • Tämä on suunniteltu!

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.

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *