Niekedy potrebujete vedieť, v ktorom adresári je spustený skript. Napríklad v rovnakom adresári sú ďalšie skripty, ktoré by mal spustiť aktuálny spustený skript. Aby ich mohol spustiť, bolo by dobré, keby vedel, kde ich má hľadať, pretože skript môžete spustiť v úplne ľubovoľnom adresári alebo ho použiť na spustenie samotného súboru skriptu, ale symbolický odkaz v inom adresári, ktorý označuje do súboru skriptu.
Môžete to samozrejme urobiť iba v skripte samotnom v premennej a môžete naprogramovať úplnú cestu k adresáru, v ktorom tento skript leží. Získate niečo také:
Je to funkčná možnosť a dva vyššie uvedené problémy sa vyriešia, ale ak potrebujete presunúť skript do iného adresára, budete musieť zmeniť hodnotu premennej v samotnom skripte. Nie príliš pohodlné.
Pre krásne riešenie problému musíte poznať iba tri veci:
- Cesta k spustenému skriptu sa dá nájsť pomocou $ 0, ale problém je, že je relatívny, t.j. Ak spustíte skript ako ./script.sh, potom $ 0 bude obsahovať ./script.sh
- Tím readlink s parametrom -e vyrieši dva problémy naraz: po prvé, vráti úplnú cestu do súboru skriptu, ak ste na jeho spustenie použili symbolický odkaz (aj keď išlo o reťazec symlink), a po druhé, prevedie relatívnu cestu, ak sa získa pomocou $ 0, na absolútnu
- Aby ste sa zbavili názvu súboru skriptu na konci absolútnej cesty, musíte použiť príkaz dirname
13 komentárov:
A ak ste nepoužili na spustenie symbolického odkazu? Oprava .. Stručne povedané, prišiel som na to. To všetko kecy a oboje. A spustite skript, aký chcete. > A ak ste nepoužili na spustenie symbolického odkazu? Ste si istí, že nazývať kecy riešením, v ktorom ste ešte nedosiahli dobrý nápad? > vo zväzku nie je žiadny „readlink“ > A spustite skript tak, ako chcete A tiež vysvetlite, prosím, aké je riešenie oboch tímov, ktoré som dal, „záhrade“ vášho rozhodnutia týchto troch tímov? Navyše, ísť do adresára, aby ste našli cestu k nemu, zasahuje trochu barle, nie je vám to tak? Ale už to s tým viem, samozrejme, pretože v bash bez bariel nikde. Ako môžeme použiť príkaz „PWD“ na operačných systémoch Linux alebo Unix?
A prečo sa obťažovať so záhradou.
Jednoducho tak:
DIRSCRIPT = $ (pwd) # Aktuálny adresár
echo „$
Toto je vynikajúce univerzálne riešenie, najmä ak sa domnievate, že vo fragmente nie je „readlink“.
Všetko bude fungovať dokonale správne
Kde som napísal, že by to malo fungovať zadarmo? Prečítajte si názov blogu a príspevky.
Nepoužívam zadarmo, ale dovoľte mi opýtať sa sám seba, aký príkazový tlmočník v ňom používate? Pokiaľ viem, v predvolenom nastavení je tcsh alebo csh, a nie bash vôbec.
Čo si? Oukey. Potom vytvorte symbolický odkaz na váš skript v inom adresári (nie v tom, v ktorom skript leží), zadajte tento adresár a spustite symbolický odkaz. Buďte veľmi prekvapení. Vaše riešenie vráti cestu do adresára, v ktorom sa nachádza symbolický odkaz, namiesto do adresára, v ktorom sa nachádza samotný skript. Dúfam, že prístupné vysvetlil.PWD - príkaz v systéme Unix / Linux na zobrazenie aktuálneho adresára
PWD je skratka pre Print Working Directory - zobrazuje adresár, kde sa užívateľ nachádza. Príkaz „PWD“ sa považuje za jeden z najbežnejšie používaných príkazov v operačných systémoch Linux, AIX, HP-UX, * BSD a ďalších operačných systémoch podobných UNIX spolu s príkazmi ls a cd.
Príkaz je možné použiť na nasledujúce účely v operačných systémoch Apple OS X a UNIX alebo Linux:
Aktuálny adresár nie je nič iné ako adresár, v ktorom aktuálny užívateľ momentálne pracuje alebo je umiestnený pri použití shellu shellu bash alebo ksh alebo zsh alebo tcsh / csh. Ak chcete použiť príkazový riadok, musíte otvoriť terminál (GUI) alebo zadať konzolu.
príklady:
Ak chcete zobraziť aktuálny pracovný adresár, napíšte:
V tomto príklade je / home / pavelzen aktuálnym adresárom. Úplná cesta k akémukoľvek adresáru v operačných systémoch podobných Unixu začína vždy lomkou. Jednoducho povedané:
- / - slash - hovorí o koreňovom adresári vášho systému alebo systému súborov
- home - domovský adresár, v ktorom sa nachádzajú nastavenia a osobné súbory všetkých existujúcich používateľov v systéme
- pavelzen - domovský adresár používateľa, v ktorom sú obsiahnuté všetky nastavenia a osobné súbory používateľa pavelzen
Typická situácia pri použití shellu Linux / Unix je príkaz PWD na zobrazenie aktuálneho adresára
Väčšina používateľov systému Linux / Unix používa príkaz PWD spolu s príkazmi ls a cd:
# # Kde som?
Vypíše obsah aktuálneho adresára
Zoznam obsahu aktuálneho adresára so všetkými podrobnosťami o každom súbore
"Zmeňte aktuálny adresár na" Video "adresár
Vo vyššie uvedenom príklade sa príkaz PWD používa na potvrdenie, že aktuálny adresár sa skutočne zmenil.
Pozrite si všetky informácie o príkaze PWD z terminálu:
V systéme Linux môžete použiť: -
realpath yourfile na získanie úplnej cesty k súboru, ako mnohí navrhli.
V podobnom scenári spustím skript cshell z iného miesta. Aby som nastavil správnu absolútnu cestu skriptu tak, aby bežal iba v určenom adresári, používam nasledujúci kód:
$ 0 ukladá presný reťazec pri spustení skriptu.
Napríklad, ak bol skript spustený nasledovne: $> ../../test/test.csh, $ script_dir bude obsahovať /home/abc/sandbox/v1/../../test
Práce na počítačoch Mac, Linux, * nix:
Získate tak ponuku zo všetkých súborov v aktuálnom adresári:
Výsledok je možné ľahko skopírovať do zoznamu pythónov alebo do akejkoľvek podobnej dátovej štruktúry.
Toto je vysvetlenie toho, čo sa deje v odpovedi @ ZeRemz:
- Tento skript dostane relatívnu cestu ako argument „$ 1“
- Potom dostaneme dirname časť tejto cesty (do tohto skriptu môžete odovzdať adresára alebo súboru): dirname "$ 1"
- Potom cd "$ (dirname" $ 1 ") k tomuto relatívnemu dir
- && pwd -P a získajte absolútnu cestu. -P voľba sa vyhýba všetkým symbolickým odkazom
- Potom pridáme základný názov do absolútnej cesty: $ (základný názov „$ 1“)
- Ako posledný krok to zopakujeme