Užitočné tipy

Ako získať úplnú cestu k súboru?

Pin
Send
Share
Send
Send


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:

  1. 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
  2. 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
  3. Aby ste sa zbavili názvu súboru skriptu na konci absolútnej cesty, musíte použiť príkaz dirname
Príklad:

13 komentárov:

A ak ste nepoužili na spustenie symbolického odkazu?
A prečo sa obťažovať so záhradou.
Jednoducho tak:
DIRSCRIPT = $ (pwd) # Aktuálny adresár
echo „$"

Oprava .. Stručne povedané, prišiel som na to. To všetko kecy a oboje.
Toto je vynikajúce univerzálne riešenie, najmä ak sa domnievate, že vo fragmente nie je „readlink“.

A spustite skript, aký chcete.

> A ak ste nepoužili na spustenie symbolického odkazu?
Všetko bude fungovať dokonale správne

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“
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.

> A spustite skript tak, ako chcete
Č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.

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.

PWD - príkaz v systéme Unix / Linux na zobrazenie aktuálneho adresára

Ako môžeme použiť príkaz „PWD“ na operačných systémoch Linux alebo Unix?
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:

  • Nájdite úplnú cestu k aktuálnemu adresáru
  • Uložte úplnú cestu aktuálneho adresára do premennej shellu
  • Skontrolujte absolútnu cestu
  • Skontrolujte fyzickú cestu, t. vylúčiť symbolické odkazy
  • Aktuálny adresár

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é:

  1. / - slash - hovorí o koreňovom adresári vášho systému alebo systému súborov
  2. 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
  3. 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

Pin
Send
Share
Send
Send