2007.01_Programowalne dopełnianie tabem w bashu_[Programowanie].pdf

(1064 KB) Pobierz
439030642 UNPDF
dla programistów
Bash
dopełnianie tabem
w bashu
Jacek Fedoryński
Konsola tekstowa jest potężnym narzędziem w rękach doświadczonego użytkownika. Jak w pełni
wykorzystać możliwości, które daje nam bash? Zdeiniujmy sami co będzie nam podpowiadała
powłoka po naciśnięciu klawisza [Tab].
nych interfejsów często dziwią się, wi-
dząc kogoś wykonującego większość prac
za pomocą linii poleceń. Niektórym praca
z powłoką w trybie tekstowym kojarzy się raczej z urzą-
dzeniami z minionej epoki, dalekopisami lub termina-
lami z czarnym tłem i zielonymi znakami (popularny
motyw z ilmów). Tacy użytkownicy często uważają,
że praca w linii poleceń jest trudna (trzeba wiedzieć co
wpisać) i mozolna (nawet kiedy już wiemy, wpisanie
polecenia wymaga długiego „klepania” w klawiaturę).
Powszechne jest przekonanie, że im więcej da się zro-
bić w systemie, nie posuwając się do używania konso-
li tekstowej, tym lepiej. Może i tak jest w rzeczywisto-
ści, niemniej powłoka jest (i prawdopodobnie pozosta-
nie) ulubionym sposobem komunikowania się z kom-
puterem administratorów i użytkowników bardziej za-
awansowanych. Czy można podejrzewać, że będzie
tak dalej? Rozejrzyjmy się wokół. Linuksowi hakerzy
z pewnością nie mają co do tego wątpliwości. Firma Mi-
crosoft (kojarzona raczej z graicznymi interfejsami) nie
tak dawno wypuściła swoją nową powłokę tekstową,
Windows PowerShell. Legenda łatwych interfejsów,
klasyczny Mac OS, nie miał w ogóle konsoli tekstowej,
ale już od paru lat „jabłuszka” (jak mawiają użytkowni-
cy Mac'ow) działają pod kontrolą systemu o korzeniach
uniksowych, a co za tym idzie posiadającego powłokę
tekstową.
Dlaczego konsola tekstowa
Co sprawia, że linuksowi administratorzy, jak również
inni minimalnie ambitniejsi użytkownicy, wolą męczyć
się wpisując długie i skomplikowane komendy? Prak-
tycznie każda powłoka, w tym najpopularniejszy chy-
ba obecnie bash , zawiera wiele ułatwień, dzięki którym
można znacznie zredukować ilość mozolnego wpisy-
O autorze
Autor jest wykładowcą w Akademii Linuksa. W wolnych
chwilach jeździ na rowerze i zastanawia się dlaczego
tak mało kobiet zajmuje się komputerami. Czyta maile
pod adresem jfedor@jfedor.org
58
styczeń 2007
Programowalne
U żytkownicy przyzwyczajeni do graicz-
439030642.035.png 439030642.036.png 439030642.037.png 439030642.038.png
 
dla programistów
Bash
Listing 1. Funkcja generująca dopełnienia dla umount
Jest to dość prosty przykład, ale widać, że
potencjalnie oszczędności mogą być ogrom-
ne. Nie mówilibyśmy jednak, że dopełnia-
nie tabem jest programowalne , gdyby na tym
ograniczały się możliwości tej funkcjonal-
ności.
_umount()
{
local cur
COMPREPLY=()
cur=${COMP_WORDS[COMP_CWORD]}
COMPREPLY=( $( compgen -W '$( mount | cut -d" "
-f 3 )' -- $cur ) )
return 0
}
complete -F _umount
-o dirnames umount
Nieco sprytniejsze
podpowiedzi
Uzupełnianie nazw komend i plików oraz
katalogów jest bardzo wygodne, ale czy nie
byłoby dobrze, gdyby bash był sprytniejszy
i wiedział, że w danym miejscu linii pole-
ceń nie ma sensu dopełniać nazw plików
a przydałoby się za to dopełnianie czegoś in-
nego? Czy nie byłoby dobrze, gdyby po na-
pisaniu cvs [Tab] , bash nie proponował
nazw plików, a zamiast tego dopełniał ko-
mendy CVS'a w rodzaju commit , update czy
checkout ? Czy nie byłoby dobrze gdyby po
napisaniu tar xzvf [Tab] , bash propono-
wał nam tylko nazwy plików, które koń-
czą się na tar.gz ? Czy nie byłoby po prostu
wspaniale gdyby po napisaniu scp kompu-
ter:katalog/[Tab] uzupełniane były na-
zwy plików, ale nie z komputera lokalne-
go, a zdalnego? Powłoka bash zawiera me-
chanizm umożliwiający zaprogramowanie
wszystkich tych rzeczy i wielu innych. Ma-
ło tego, większość ze specjalizowanych do-
pełnień tabem, które przyjdą nam do gło-
wy, prawdopodobnie już została przez ko-
goś zaprogramowana. Sam w sobie bash
umożliwia nam zdeiniowanie własnych
wania. Jednym z częściej używanych te-
go typu ułatwień jest możliwość naciśnię-
cia strzałki w górę w celu przywołania po-
przedniej komendy. Bardziej wyrainowa-
nym sposobem powtórzenia którejś z po-
przednio wydanych komend jest naciśnię-
cie [C trl+R ] i wpisanie fragmentu polece-
nia, o które nam chodzi. Innej metody na
oszczędzanie palców dostarcza mechanizm
aliasów, pozwalający zdeiniować skróty na
najczęściej używane komendy (tak jak po-
pularny alias ll dla polecenia ls -l ; niby
niewielka oszczędność, ale jeśli przemno-
żymy to przez liczbę komend wydanych
dziennie, uzyskamy dużą oszczędność dla
naszych palców i klawiatury). I wreszcie
nasz główny temat – mechanizm, który (chy-
ba słusznie) robi na ludziach widzących go
po raz pierwszy największe wrażenie – do-
pełnianie tabem.
Standardowo zasada działania jest pro-
sta i bardzo skuteczna. W dowolnym mo-
mencie wpisywania polecenia możemy na-
cisnąć [ Tab ]. Jeśli zrobimy to podczas wpi-
sywania samej nazwy komendy (pierwsze-
go członu), bash „sprawdzi” jakie komendy
zaczynają się takim przedrostkiem jak wpi-
sany tekst i dopełni nazwę do końca, lub
do tego miejsca, do którego może to zrobić
jednoznacznie. Jeśli w danym miejscu nic
nie może nam podpowiedzieć, (np. kilka
poleceń zaczyna się tymi samymi literami
„ex-it”, „ex-port”) – to usłyszymy dźwięk
z głośnika. Ponowne naciśnięcie [ Tab ] spo-
woduje wyświetlenie listy możliwych po-
leceń zaczynających się wpisanym ciągiem
znaków. Podobnie wygląda sytuacja gdy
[ Tab ] naciśniemy nie na pierwszym miej-
scu linii poleceń, ale już po pierwszej spacji
(czyli podając parametry komendy), przy
czym wtedy bash nie przeszukuje już ko-
mend dostępnych w ścieżkach wymienio-
nych w zmiennej PATH , a po prostu dopeł-
nia nazwy plików widocznych na dysku
(w katalogu, w którym znajduje się użyt-
kownik). Jeśli na przykład mamy w bieżą-
cym katalogu pliki kwiatek1.png i kwiate-
k2.png , to żeby skonwertować jeden z nich
do formatu JPEG, moglibyśmy wydać ko-
mendę:
convert kwiatek1.png
kwiatek1.jpg
Jednak mając do dyspozycji dopełnianie ta-
bem, żeby ją wydać możemy nacisnąć nastę-
pujące klawisze (zależnie oczywiście od te-
go czy nie mamy w systemie innych komend
zaczynających się na conv , a w bieżącym ka-
talogu plików zaczynajacych się na kw ):
conv[ Tab ] kw[ Tab ]1[ Tab ]
kw[ Tab ]1.jpg
Listing 2. Funkcja generująca dopełnienia dla iconv
have iconv &&
_iconv()
{
local cur prev
COMPREPLY=()
cur=${COMP_WORDS[COMP_CWORD]}
prev=${COMP_WORDS[COMP_CWORD-1]}
case "$prev" in
-@(f|t|-@(from|to)-code))
COMPREPLY=( $( compgen -W '$( iconv --list | sed -e "s@//@@;" )'
-- "$cur" ) )
return 0
;;
esac
if [[ "$cur" = -* ]]; then
COMPREPLY=( $( compgen -W '--from-code -f --to-code -t --list --
output -o --verbose' -- "$cur" ) )
return 0
i
} &&
complete -F _iconv -o default iconv
www.lpmagazine.org
59
439030642.001.png 439030642.002.png 439030642.003.png 439030642.004.png 439030642.005.png 439030642.006.png 439030642.007.png 439030642.008.png 439030642.009.png 439030642.010.png 439030642.011.png 439030642.012.png 439030642.013.png 439030642.014.png
 
dla programistów
Bash
Zanim zobaczymy jak deiniuje się własne
dopełnienia, dajmy sobie chwilkę na poba-
wienie się poznanymi możliwościami bash'a ,
naciskając [ Tab ] w różnych miejscach wyda-
wanych komend.
Już? A zatem przejdźmy do rzeczy. Żeby
sprawdzić jakie dopełnienia są aktywne, wy-
dajemy polecenie:
complete
Jeśli włączyliśmy pakiet bash_completion ,
będzie ich całkiem sporo. Zobaczyć czy zde-
iniowano jakieś dopełnienie dla konkret-
nego polecenia, możemy następująco:
complete -p nazwa_polecenia
Rysunek 1. Bash 1
Jeśli nie odpowiada nam istniejące dopeł-
nienie dla jakiejś komendy, możemy je usu-
nąć:
dopełnień dla różnych poleceń, natomiast
zestaw bardzo wielu gotowych dopełnień
jest rozprowadzany w osobnym pakiecie
o nazwie bash_completion . Nawet jeśli nie
pokusimy się o tworzenie własnych, sa-
mo tylko włączenie zawartych w tym pa-
kiecie deinicji dopełnień pozwoli nam po-
czuć uśpioną dotąd potęgę tkwiącą w na-
szej powłoce. A jeśli zdecydujemy się na
programowanie swoich dopełnień, to pa-
kiet ten (choć nie jest ściśle wymagany)
będzie przydatnym źródłem bardzo wie-
lu przykładów i funkcji, z których możemy
skorzystać. Jeśli jesteśmy użytkownikami
dystrybucji Fedora Core, pakiet bash_com-
pletion możemy doinstalować z repozyto-
rium Fedora Extras, wydając jako root pole-
cenie:
complete -r nazwa_polecenia
Aby miało to trwały efekt, należy tego ty-
pu polecenie (jak również wszystkie własne
dopełnienia, które zdeiniujemy) wpisać do
pliku ~/.bash_completion , który jest włącza-
ny przez skrypt /etc/bash_completion przy za-
logowaniu.
yum install bash-completion
Jeśli nasza dystrybucja to Debian lub Ubun-
tu, to pakiet ten jest już prawdopodobnie
zainstalowany razem z podstawowym sys-
temem, jednak domyślnie nie jest włączo-
ny. Możemy temu zaradzić dodając nastę-
pującą linijkę do naszego pliku ~/.bash_pro-
ile :
Nasze własne dopełnienia
Najprostszy efekt, jaki chcielibyśmy uzyskać
na początek, to przekonanie powłoki, żeby
zamiast (lub oprócz) nazw plików i katalo-
gów, dla danej komendy proponowała nam
jej parametry. Taki efekt osiągamy wydając
polecenie:
. /etc/bash_completion
complete -W '--opcja1
--opcja2
--jakas-opcja'
nasza_komenda
Rysunek 2. Bash 2
W takim jednak przypadku bash przesta-
nie proponować nam nazwy plików, a na-
sza komenda może (oprócz wymienionych
parametrów) potrzebować również jakie-
goś pliku z danymi. Można próbować te-
mu zaradzić dodając do wywołania com-
plete parametr -o default , sprawiający,
że bash wróci do standardowego zachowa-
nia (czyli dopełniania nazw plików i kata-
logów), jeśli żadne z dopełnień zdeiniowa-
nych opcją -W nie pasuje do tego, co do tej
pory wpisał użytkownik. Nie jest to jednak
rozwiązanie idealne. Kiedy napiszemy na-
sza_komenda [Tab] , bash zaproponuje tyl-
ko parametry, a nie nazwy plików. Lepiej
60
styczeń 2007
439030642.015.png 439030642.016.png 439030642.017.png
 
dla programistów
Bash
poradzić sobie z tym problemem stosując
własną funkcję, uruchamianą przez bash'a
w momencie, kiedy potrzebuje wygene-
rować podpowiedzi po naciśnięciu [ Tab ],
ale o tym będzie w dalszej części artyku-
łu.
Listing 3. Program w Perlu generujący dopełnienia dla komend posiadających parametr --help
#!/usr/bin/perl -w
use strict;
if ( $ARGV [ 1 ] =~ /^-/ ) {
my $help = ` ${ARGV[0]} --help`;
my @shortopts = $help =~ /(?<!-)(-[A-Za-z0-9_])
(?![A-Za-z0-9_])/g ;
my @longopts = $help =~ /(?<!-)(--[A-Za-z0-9_]+)
(?![A-Za-z0-9_])/g ;
for ( sort ( grep { /^\Q ${ARGV[1]} \E/ } ( @shortopts , @longopts )))
{ print $_ , " \n " }
}
Innym prostym przykładem dopełnienia
jest polecenie, po którym podajemy nazwy
użytkowników w systemie, nazwy zmien-
nych środowiskowych, czy też nazwy ko-
mend (a zatem to, co normalnie bash dopełnia
na pierwszej pozycji). Ten ostatni przykład,
przydatny m.in. dla komendy time , możemy
zrealizować poleceniem:
complete -A command
nasza_komenda
Żeby nasz program wiedział co ma wy-
generować, przekazywane są do niego ja-
ko zmienne środowiskowe dwa parame-
try: COMP_LINE – obecny stan linii po-
leceń (czyli to co wpisał użytkownik);
COMP_POINT – liczba oznaczająca w któ-
rym miejscu linii poleceń znajduje się kur-
sor. Jeśli zażyczyliśmy sobie wywoływania
nie zewnętrznego programu, a funkcji po-
włoki, to dostępne są dodatkowo zmienne:
COMP_WORDS – tablica zawierająca kolej-
ne człony podzielonej (mówiąc w uprosz-
czeniu: na spacjach) linii poleceń; COMP_
CWORD – indeks w tej tablicy, określają-
cy w którym członie znajduje się kursor.
Zarówno do zewnętrznego programu, jak
i do funkcji bash'a , przekazywane są 3 pa-
rametry: pierwszy jest nazwą komendy,
dla której powłoka usiłuje znaleźć dopeł-
nienie, drugi – słowem, po którym użyt-
kownik nacisnął [ Tab ], a trzeci słowem po-
przedzającym je. Nasz program lub funk-
cja musi również mieć możliwość przeka-
zania bash'owi wygenerowanych przez sie-
bie uzupełnień. Zewnętrzny program robi
to wypisując możliwe dopełnienia w ko-
lejnych liniach na standardowym wyjściu,
funkcja powłoki – wpisując je do tablicy
COMPREPLY .
PLY jako pustą (tutaj nie jest to potrzeb-
ne, ale będzie dobrym zwyczajem kiedy
nasze funkcje zrobią się bardziej skompli-
kowane). Do zmiennej cur wpisujemy od-
powiedni element tablicy COMP_WORDS
(ten, przy którym znajduje się kursor, czyli
tekst, który będziemy próbować dopełnić).
Cała magia tkwi w linii 8, rozważmy ją od
środka. Polecenie mount wypisuje wszyst-
kie aktualnie podmontowane w systemie
katalogi. Przepuszczamy jego wynik przez
polecenie cut , żeby wyłuskać trzecią ko-
lumnę – ścieżkę, na której zamontowany
jest system plików (pierwsza kolumna to
urządzenie, a druga słowo “on”). Otrzy-
maną w ten sposób listę katalogów po-
dajemy komendzie compgen , o której jesz-
cze nie wspomnieliśmy, a która będzie
pojawiała się bardzo często w takich sy-
tuacjach. Jak pamiętamy, w zmiennej cur
przechowujemy słowo, po którym użyt-
kownik nacisnął [ Tab ] – początek ścież-
ki, którą chcemy uzupełnić. W wyniku
musimy więc podać tylko te z katalogów
wypisanych przez polecenie mount , któ-
re zaczynają się od tekstu przechowywa-
nego w zmiennej cur . Z pomocą przycho-
dzi właśnie komenda compgen . Przyjmuje
ona podobne parametry co complete , ale nie
przedeiniowuje dopełnień, jakich bash bę-
dzie używał, a po prostu wypisuje wyge-
nerowane dla danej sytuacji dopełnienia.
Można więc (tak jak robimy to tutaj) podać
mu listę słów po parametrze -W oraz po-
czątek tekstu, a dostaniemy w wyniku tyl-
ko te słowa, które rozpoczynają się poda-
nym przedrostkiem. Przykładowo, komen-
da:
Zależnie od potrzeb, w miejscu parametru
command użyjemy user , variable , czy kilku
innych, które są dostępne.
Nasze specyiczne (dla konkretnych po-
leceń) dopełnienia wciąż nie zasługiwa-
łyby na miano programowalnych, gdyby
polegały wyłącznie na zdeiniowaniu li-
sty parametrów, jakich komenda się spo-
dziewa, czy też podaniu, że oczekuje nazw
użytkowników lub grup. bash pozwala na
wywoływanie dowolnej funkcji powło-
ki, a także zupełnie dowolnego programu
w systemie, w momencie gdy potrzebuje
znaleźć możliwe dopełnienia po tym jak
użytkownik nacisnął [ Tab ]. Taka funkcja
lub program otrzymuje na wejściu obec-
ny wygląd linii poleceń i może w dowolny
sposób wygenerować listę możliwych uzu-
pełnień tego, co do tej pory zostało wpisa-
ne (no, prawie dowolny – dobrze było-
by, żeby nie zajęło to zbyt dużo czasu).
W celu wygenerowania możliwych dopeł-
nień za pomocą funkcji powłoki, wydaje-
my polecenie:
complete
-F nasza_funkcja
nasza_komenda
Wreszcie naprawdę
zaprogramowane podpowiedzi
Przyjrzyjmy się bardzo prostej funkcji ge-
nerującej uzupełnienia (wiele podobnych
można znaleźć w pakiecie bash_comple-
tion) . Jej cały kod widać na Listingu 1, a ko-
menda, dla której dostarcza ona podpo-
wiedzi, to umount . Polecenie complete wy-
wołujemy dodatkowo z opcją -o dirna-
mes , tak więc jeśli funkcja nie dostarczy
żadnych dopełnień, bash będzie dopełniał
nazwy katalogów, co brzmi rozsądnie. Po-
czątek będzie się powtarzał w podobnej
formie w wielu funkcjach generujących
dopełnienia. Inicjujemy tablicę COMPRE-
Tak jak napisałem na początku artykułu, roz-
sądnie będzie zarówno naszą funkcję, jak
powyższe wywołanie, umieścić w pliku ~/
.bash_completion . W celu generowania dopeł-
nień za pomocą programu (napisanego być
może już nie jako skrypt powłoki, ale w do-
wolnym innym języku programowania) wy-
dajemy polecenie:
compgen -W 'ala bela' -- a
complete
-C nasz_program
nasza_komenda
Wypisze tylko „ala”, bo tylko to słowo za-
czyna się na „a”. Dwa minusy oznaczają, że
cokolwiek po nich nastąpi, choćby zaczy-
nało się od minusa, nie będzie interpreto-
www.lpmagazine.org
61
439030642.018.png 439030642.019.png 439030642.020.png 439030642.021.png 439030642.022.png 439030642.023.png 439030642.024.png 439030642.025.png 439030642.026.png 439030642.027.png 439030642.028.png 439030642.029.png 439030642.030.png
 
dla programistów
Bash
wane jako przełącznik compgena , a jako sło-
wo, które będzie próbował uzupełniać.
Jak widzimy funkcja ta jest bardzo pro-
sta, nie przewiduje nawet dopełniania innych
niż ścieżki do katalogów parametrów polece-
nia umount . Jak skomplikowanymi uczynimy
nasze dopełnienia zależy jednak tylko od na-
szych potrzeb i fantazji.
powało samo w osobnej linii. Reszta funk-
cji odpowiada za przypadek, kiedy słowo,
które uzupełniamy, zaczyna się od minusa,
próbujemy dopełnić je znanymi parametra-
mi polecenia iconv , w znany nam już spo-
sób używając polecenia compgen aby wypeł-
nić tablicę COMPREPLY . Zwróćmy uwagę,
że cała deinicja poprzedzona jest frazą ha-
ve iconv && ( have to jedna z pomocni-
czych funkcji udostępnianych przez pa-
kiet bash_completion). Efekt jest taki, że dei-
nicja uaktywni się tylko wtedy, kiedy w na-
szym systemie naprawdę znajduje się pole-
cenie iconv (w naszym przypadku nie jest
to tak bardzo istotne, jednak to dobry zwy-
czaj, gdybyśmy mieli kiedyś rozprowadzać
nasze dzieła).
Co jeśli nie czujemy się za dobrze w pisa-
niu skryptów basha i wolimy dopełnienia ge-
nerować programami w innym języku? Jak
już wspomniałem wcześniej, nic nie stoi na
przeszkodzie aby tak zrobić.
niamy, najpierw sprawdzamy czy zaczyna
się ono od minusa, gdyż tylko w takiej sytu-
acji podejrzewamy, że trzeba dopełnić jakiś
przełącznik (a nie np. nazwę pliku). Jeśli tak
właśnie jest, uruchamiamy komendę, której
sprawa dotyczy z parametrem --help i za-
pisujemy wynik w zmiennej $help . Nazwę
komendy otrzymaliśmy jako pierwszy pa-
rametr do programu, czyli $ARGV[0] .
W następnych dwóch linijkach za pomocą
wyrażeń regularnych wyłuskujemy z tek-
stu komunikatu pomocy nazwy parame-
trów, najpierw te jednoliterowe poprzedzo-
ne jednym minusem, a potem te dłuższe
poprzedzone dwoma minusami. Wreszcie
łączymy obie listy, przy użyciu funkcji grep
odiltrowujemy te parametry, które nie za-
czynają się od tekstu, po którym użytkow-
nik nacisnął [ Tab ]. (Jak pamiętamy jest to
odpowiednikiem użycia polecenia comp-
gen w funkcji powłoki.) Wynik sortujemy
i wypisujemy na ekranie. Jeśli taki program
zapiszemy jako plik /usr/local/bin/helper.pl
i damy mu prawa do wykonywania, to
po wydaniu komendy:
Trochę lepsza funkcja
dla programu iconv
Często okazuje się, że to, jaki parametr mo-
że pojawić się w danym miejscu, zależy nie
tylko od komendy, od jakiej zaczyna się li-
nia poleceń, ale także od pozycji parametru,
a także od tego jakie parametry wystąpiły
przed nim. Spójrzmy na Listing 2, zawie-
rający funkcję generującą dopełnienia dla
programu iconv . Zaczyna się podobnie. Na
zmienną cur przypisujemy zawartość słowa,
które chcemy dopełnić, a na zmienną prev
słowo poprzednie, od którego będzie zale-
żało w jaki sposób to zrobimy. Szczególną
reakcję przewidujemy w przypadku, gdy
poprzedni parametr był jednym z -f , -t , -
-from-code , --to-code , oznaczających ko-
dowanie, z którego albo, na które program
iconv ma skonwertować nasz tekst. Czy
znajdujemy się obecnie w takiej sytuacji
sprawdza warunek w liniach 10-11. Słowo
następujące po dowolnym z tych paramet-
rów będzie nazwą kodowania. Listę wszyst-
kich dostępnych kodowań możemy uzy-
skać wywołując iconv z parametrem --list .
Z wynikiem postępujemy podobnie jak
w poprzednim przykładzie, wywołanie se-
da służy temu, aby każde kodowanie wystę-
Dopełnienia zewnętrznym
programem
Na Listingu 3 widzimy program, który w
sposób uniwersalny generuje dopełnienia
dla dowolnej komendy, pod warunkiem, że
udostępnia ona parametr --help , wypisują-
cy wszystkie dostępne parametry. Program
napisany jest w Perlu, ale równie dobrze
moglibyśmy użyć Haskella, Ruby’ego czy
właściwie dowolnego języka, w którym po-
traimy odczytać zawartość zmiennych śro-
dowiskowych lub parametrów linii poleceń
i wypisać wynik na ekranie. W zmiennej
$ARGV[1] znajduje się słowo, które dopeł-
complete -o default
-C /usr/local
/bin/helper.pl tar
Będziemy mogli cieszyć się tym, że po na-
pisaniu tar -[Tab] , bash zaproponuje nam
wszystkie parametry polecenia tar , któ-
re udało się uzyskać dzięki pomocy dołą-
czonej do tego programu (polecenie tar
--help ). Oczywiście pakiet bash_completion
zawiera lepszą funkcję dopełniającą dla tara
niż nasza, więc to tylko przykład. Zawiera
również mniej i bardziej uniwersalne funk-
cje realizującą podobny algorytm, co nasz
program w Perlu.
Wszystkie parametry komendy comple-
te , jak również szczegółowo zasadę działa-
nia dopełniania tabem, opisuje podręcznik
systemowy man bash . Zachęcam do prze-
studiowania pakietu bash_completion , pełne-
go przykładów dla najróżniejszych komen-
di do własnych eksperymentów. Użytkow-
ników innych powłok, takich jak tcsh czy
zsh , zachęcam do sprawdzenia jak wygląda
możliwość dostosowywania dopełniania ta-
bem do własnych potrzeb w ich przypadku.
Życzę powodzenia!
Rysunek 3. Bash 3
62
styczeń 2007
439030642.031.png 439030642.032.png 439030642.033.png 439030642.034.png
 
Zgłoś jeśli naruszono regulamin