3 tapaa muokata polkua komentorivillä

Ympäristömuuttuja PATH on yksi tärkeimmistä osista Linuxin komentorivin käytössä. Nykyaikaisessa järjestelmässä se on usein hyvin pitkä merkkijono hakemistoja, jotka on kaikki erotettu kaksoispisteillä. Jos haluat muuttaa jotain kohdetta polussasi, voi olla ärsyttävää joutua kirjoittamaan ja muokkaamaan monia eri hakemistojen nimiä ja saada kaikki oikein. Onneksi on olemassa muutamia tapoja helpottaa sitä. Sama pätee mihin tahansa ympäristömuuttujaan, ja suurin osa työkaluista, jotka näytän sinulle, toimii mihin tahansa niistä.

Yleiskatsaus

Kuten useimmissa asioissa Linuxissa, on monia tapoja päästä tavoitteeseesi. Vaikka sanoin, että tapoja on kolme, tapoja on luultavasti loputon määrä, ja tässä on yksi, jota en laske näiden kolmen joukkoon: Käytä laajennusta.

Tämä toimii kuitenkin vain, jos haluat lisätä jotain muuttujan alkuun tai loppuun. Sanotaan esimerkiksi, että haluat lisätä ~/foo muuttujaan PATH:

# add to the end:
PATH="$PATH:~/foo"
# add to the start:
PATH="~/foo:$PATH"

Tämä on helppoa, mutta se ei auta, jos haluat poistaa tai muuttaa jotain muuttujassa olevaa. Se ei myöskään auta, jos haluat vaihtaa joidenkin olemassa olevien hakemistojen järjestystä.

Menetelmä 1: Vaikein tapa

Jos olet graafisen käyttöliittymän päätelaitteessa, sinulla on luultavasti tapa leikata ja liittää tekstiä. Saattaa siis tuntua helpolta kirjoittaa:

echo $PATH

Tällöin voit poimia tekstin ja uudella komentorivillä kirjoittaa PATH=" ja liittää loput tekstistä. Tee muutokset, sulje lainausmerkit ja paina Enter. Saatat ajatella, että tämä ei ole kovin suuri parannus, jos haluat muokata olemassa olevaa tekstiä, mutta käy ilmi, että jos painat CONTROL+X, CONTROL+E bashissa, saat mukavan editori-ikkunan, jossa voit muokata komentoasi. Tämä toimii minkä tahansa komennon kanssa, ja se on erittäin hyödyllinen, kun vedät historiasta pitkän komentorivin, jota haluat korjata.

Miten bash tietää, mitä editoria käyttää? Ympäristömuuttujan EDITOR avulla. Jos et pidä editorista, jonka se tuo oletusarvoisesti esiin, muuta käynnistystiedostoasi (esim. .bashrc) niin, että asetat muuttujan:

EDITOR=nano

Tämä on hyvä, mutta voimme tehdä parempaa. Loppujen lopuksi tämä menetelmä vaatii muuttujan näyttämistä, manuaalista kirjoittamista ja sitten kopioinnin ja liittämisen tekemistä.

Metodi 2: envedit/pathedit

GitHubissa on skriptejä enveditille ja patheditille. Nämä ovat yksinkertaisia skriptejä, jotka voit laittaa järjestelmääsi jonnekin, josta ne löytyvät (esimerkiksi /usr/local/bin). Jos haluat, että ne löytyvät polusta, tee niistä suoritettavia (chmod 755).

Ongelmana on, että skriptin ympäristöön tekemät muutokset eivät säily sen jälkeen, kun skripti poistuu (ks. kohta Mikä on ympäristö?, jäljempänä). Tämän seurauksena sinun on lähdettävä nämä tiedostot, jotta ne toimisivat. Pathedit-skripti muokkaa PATH suosikkieditorissasi, kun taas envedit vaatii muuttujan nimen ja tekee saman työn:

# use . or source for these scripts
. pathedit
# or
source pathedit
. envedit PULSE # edit $PULSE

Tietyllä tavalla ärsyttävää, kun pitää muistaa lähdeviittaus koko ajan, joten skripteissä on erityinen ominaisuus. Jos lähdet ne kerran .bashrc:ssä ja annat argumentin alias, skriptit asettavat itselleen aliaksen niin, että pelkkä patheditin tai enveditin kirjoittaminen saa lähteen tapahtumaan:

. pathedit alias # now just typing pathedit will work

Tavanomaiseen tapaan skripti käyttää $EDITOR:ää tietääkseen, mitä editoria käyttää. Jos haluat erityisen editorin vain tätä tarkoitusta varten, aseta $PATHEDIT_EDITOR tai $ENVEDIT_EDITOR ja se ohittaa tavalliset asetukset. Jos tätä ei ole asetettu, skripti etsii $EDITOR ja $VISUAL ennen kuin käyttää oletusarvoisesti vi:tä.

Menetelmä 3: envedit2/pathedit2

Kolmas menetelmä on myös samalla GitHub-sivulla. Toiminta on aivan sama kuin menetelmässä 2. Eli laitat edelleen tiedostot jonnekin ja kutsut niitä alias-argumentilla asettaaksesi ne. Nämä skriptit eivät kuitenkaan käytä tekstieditoria. Sen sijaan ne lataavat bash-komentorivin puskuriin oikean muokattavan merkkijonon. Tämä on hyvin samanlainen kuin ensimmäinen menetelmä, paitsi että vaiheet on automatisoitu puolestasi.

Huomaa, että kun suoritat kumpaakaan näistä, ne asettavat aliaksen enveditille tai patheditille, joten et käytä 2:ta niiden käyttämiseen muuten kuin silloin, kun asetat ne. Tämä tarkoittaa myös sitä, että viimeksi asettamasi ”voittaa”. Et voi asettaa molempia samaan aikaan, ellet tee jotain skriptileikkausta tai aseta omia aliaksia.

Kun suoritat jommankumman näistä skripteistä, saatat nähdä oudon escape-merkin ilmestyvän kehotteen eteen. Se on tilaraportti, joka käynnistää puskurin täyttämisen. Se on vaaraton, ja jos se häiritsee sinua, paina vain CONTROL+L piirtääksesi näytön uudelleen.

Tässä on sinun kolme

Jos haluat käyttää vain näitä skriptejä, olet valmis. Toivottavasti niistä on sinulle hyötyä. Jos sinua ei kiinnosta, miten ja miksi tämä kaikki toimii, voit lopettaa tähän. Mutta jos haluat tietää lisää siitä, miksi nämä skriptit on aliasoitu ja miten ympäristö toimii, lue eteenpäin.

Mikä on ympäristö?

Voit ajatella ympäristöä pienenä tietokantana, joka välitetään jokaiseen ohjelmaan. Sinulla on esimerkiksi luultavasti ympäristömuuttuja nimeltä EDITOR, joka on yleensä asetettu esimerkiksi vi:lle, emacsille tai nanolle. Kun ohjelman täytyy kutsua tekstieditori, se saa selville, mitä editoria haluat käyttää lukemalla tuota ympäristömuuttujaa.

Kun ohjelma A käynnistää toisen ohjelman (B), lapsiohjelma saa kopion ympäristöstä, vaikka ohjelma A voikin tehdä siihen muutoksia ennen kuin se käynnistää B:n. Kaikki B:n tekemät muutokset ovat kuitenkin voimassa vain B:ssä ja sen käynnistämissä ohjelmissa.

Käytännössä tämä tarkoittaa sitä, että mikään, mitä teet käynnistyneessä ohjelmassa, ei vaikuta mihinkään muuhun ohjelmaan, joka ei käynnistynyt ohjelmasta. Tämä on todellinen ongelma komentotulkkiskripteissä. Oletetaan esimerkiksi, että haluaisit kirjoittaa skriptin, joka lisäisi ~/foo PATH:n loppuun. Tämä ei toimi:

#!/bin/bash
# Bad example
PATH="$PATH:~/foo"

Ongelma on, että skripti suoritetaan omassa bash-kopiossaan. Se muuttaa tunnollisesti muuttujaa PATH ja poistuu sitten, jolloin uusi kopio PATH katoaa. Muutos olisi tietysti voimassa missä tahansa muussa skriptin osassa. Jotta tämä toimisi, sinun pitäisi source skriptissä (ja silloin se ei tarvitse #! -riviä, vaikka sen jättäminen ei haittaa). Oletetaan, että yllä olevan skriptin nimi olisi foopath. Voisit sanoa:

source ./foopath
# or the same thing:
. ./foopath

Jotkut mainituista skripteistä toimivat näin, lähteen kautta komentotulkkiin ne voivat muuttaa komentotulkin senhetkistä ympäristöä.

Ei muuta, oikeastaan… Paitsi

Jos selvisit näin pitkälle, onnittelut. Toivottavasti pidät näitä työkaluja hyödyllisinä ja muista raportoida virheistä GitHubissa.

Bonuskierros

Totesin aiemmin, että manuaalinen leikkaaminen ja liittäminen saattaa olla vaikein tapa. On kuitenkin yksi toinenkin tapa tehdä tämä. Jos /etc/inputrc tai ~/.inputrc on asetettu oikein, voit kirjoittaa (mutta älä paina Enteriä):

PATH=$PATH

Sitten paina Alt+Control+E ja komentotulkki laajentaa $PATH-muuttujan puolestasi. Jos kuitenkin yrität:

PATH="$PATH"

Havaitset, että laajentaminen kadottaa lainausmerkit. Sinun on tehtävä hankala:

PATH=\"$PATH\"

Sitten paina Alt+Control+E. Tulos bind -P voi kertoa, onko funktio shell-expand-line sidottu mihinkään.

Vastaa

Sähköpostiosoitettasi ei julkaista.