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.