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-
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
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
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
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
Plik z chomika:
SOLARIX33
Inne pliki z tego folderu:
2006.01_Koder plików w formacie OGG_[Programowanie].pdf
(722 KB)
2007.06_Piękno fraktali_[Programowanie].pdf
(1778 KB)
2008.11_GanttProject_[Programowanie].pdf
(1014 KB)
2007.04_USB Device Explorer_[Programowanie].pdf
(1134 KB)
2006.09_QT, PyQT – szybkie tworzenie baz danych_[Programowanie].pdf
(1319 KB)
Inne foldery tego chomika:
Administracja
Aktualnosci
Audio
Bazy Danych
Bezpieczenstwo
Zgłoś jeśli
naruszono regulamin