Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Filename-completion, bugs of (bijna) ondoorgrondelijk?

2 views
Skip to first unread message

Adri Verhoef

unread,
Apr 25, 2013, 7:41:27 AM4/25/13
to
Filename-completion werkte voorheen prima (goed genoeg), tegenwoordig snap ik
het niet meer.

Er is hier een file in /tmp en die heet "De 250 lijst.csv" (zonder
aanhalingstekens, met spaties).

$ ls /tmp/"D

Nu typ ik een TAB, er verschijnt op het scherm:

$ ls /tmp/"/tmp/De 250 lijst.csv"

~~~

Vanaf hier geef ik aan dat ik een TAB typ d.m.v. "<TAB>".

~~~

Een ander geval. Er is hier een file "xml051.xml".

$ ls x<TAB>
$ ls xml051.xml
xml051.xml

Vervolgens wil ik een bepaald shellprogramma aanroepen: "mkjaaroverzicht.sh":

$ sh mk<TAB>
$ sh mkjaaroverzicht.sh

Ik typ verder om de file "xml051.xml" als argument op te halen:

$ sh mkjaaroverzicht.sh x

Nu typ ik een TAB, het resultaat: er gebeurt niets op het scherm.

~~~

Een ander geval. Er staan hier drie files, "9x.pdf", "9f.csv" en "9m.csv".

$ ls 9<TAB>
9f.csv 9m.csv 9x.pdf
$ oocalc 9<TAB>
9f.csv 9m.csv

Okee, de file met suffix ".pdf" verdwijnt, dat kan ik nog billijken. Echter:
(ik typ een asterisk en dan een TAB)

$ oocalc 9*<TAB>
$ oocalc 9f.csv

Onbegrijpelijk. Er is toch ook een file "9m.csv"?

~~~

Bijna overbodig om te zeggen, ik wil m'n oude shellgedrag terug. Ik heb niet
geklaagd over te weinig mogelijkheden met bash, nu zijn er echter plotseling
zóveel mogelijkheden (zie de manpage van Bash) dat je door de bomen het bos
niet meer ziet en het oude gedrag is ongevraagd naar de achtergrond verdwenen.

Adri

Rob

unread,
Apr 25, 2013, 12:01:28 PM4/25/13
to
Adri Verhoef <a...@news.a3.xs4all.nl> wrote:
> Filename-completion werkte voorheen prima (goed genoeg), tegenwoordig snap ik
> het niet meer.
>
> Er is hier een file in /tmp en die heet "De 250 lijst.csv" (zonder
> aanhalingstekens, met spaties).
>
> $ ls /tmp/"D
>
> Nu typ ik een TAB, er verschijnt op het scherm:
>
> $ ls /tmp/"/tmp/De 250 lijst.csv"

Dat doet ie hier zo niet, maar wat je doet is niet goed dus wellicht
is het gedrag in geval van incorrecte invoer veranderd.

Wat je moet doen is: ls "/tmp/D<TAB>
Of je kunt de " ook weglaten maar dan gaat hij de spaties vervangen
door '\ ' ipv dat hij de naam quote.
Een quote halfweg de naam dat is niet de bedoeling kennelijk.

> Een ander geval. Er is hier een file "xml051.xml".
>
> $ ls x<TAB>
> $ ls xml051.xml
> xml051.xml
>
> Vervolgens wil ik een bepaald shellprogramma aanroepen: "mkjaaroverzicht.sh":
>
> $ sh mk<TAB>
> $ sh mkjaaroverzicht.sh
>
> Ik typ verder om de file "xml051.xml" als argument op te halen:
>
> $ sh mkjaaroverzicht.sh x
>
> Nu typ ik een TAB, het resultaat: er gebeurt niets op het scherm.

De nieuwe stijl bash autocompletion "kent" de programma's en weet
wat voor soort argumenten ze verwachten. Soms is dat wel handig maar
het komt inderdaad ook voor dat het slecht werkt of dat de "kennis"
van de autocomplete gewoon incorrect is.
Kijk eens of je een file /etc/profile.d/complete.bash en een directory
/etc/bash_completion.d op je systeem hebt. Die heb ik hier wel (maar
dat zegt zoals gebruikelijk in Linux helemaal niks) en daar staan de
definities in waarmee hij die autocompletion aanstuurt.
Misschien kun je achterhalen waar die keten ergens ingeladen wordt,
dat zie ik zo snel niet, en die hele "smart" autocomplete uitschakelen.

Adri Verhoef

unread,
Apr 25, 2013, 7:14:34 PM4/25/13
to
Aan het handschrift te zien was het Rob <nom...@example.com> die schreef:
>Adri Verhoef <a...@news.a3.xs4all.nl> wrote:
>> Vervolgens wil ik een bepaald shellprogramma aanroepen: "mkjaaroverzicht.sh":
>>
>> $ sh mk<TAB>
>> $ sh mkjaaroverzicht.sh
>>
>> Ik typ verder om de file "xml051.xml" als argument op te halen:
>>
>> $ sh mkjaaroverzicht.sh x
>>
>> Nu typ ik een TAB, het resultaat: er gebeurt niets op het scherm.
>
>De nieuwe stijl bash autocompletion "kent" de programma's en weet
>wat voor soort argumenten ze verwachten. Soms is dat wel handig maar
>het komt inderdaad ook voor dat het slecht werkt of dat de "kennis"
>van de autocomplete gewoon incorrect is.
>Kijk eens of je een file /etc/profile.d/complete.bash en een directory
>/etc/bash_completion.d op je systeem hebt. Die heb ik hier wel (maar
>dat zegt zoals gebruikelijk in Linux helemaal niks) en daar staan de
>definities in waarmee hij die autocompletion aanstuurt.
>Misschien kun je achterhalen waar die keten ergens ingeladen wordt,
>dat zie ik zo snel niet, en die hele "smart" autocomplete uitschakelen.

Na wat googelen vond ik al snel een webpagina die gaat over completion met de
tab-toets in de shell (ik zocht naar "filename expansion bash doesn't work"):
https://bugs.launchpad.net/ubuntu/+source/acroread/+bug/769866
en daar vond ik ook een shellcommando dat ik de moeite van het proberen waard
vond:
complete -F _longopt -o filenames sh

En nu is het bovenstaande probleem naar wens opgelost:

$ sh mk<TAB>
$ sh mkjaaroverzicht.sh
$ sh mkjaaroverzicht.sh x<TAB>
$ sh mkjaaroverzicht.sh xml051.xml

Rob

unread,
Apr 26, 2013, 4:17:45 AM4/26/13
to
Dat zou kunnen. Maar die file(s) die ik noemde die staat dus helemaal
vol met dat soort commando's en daar kun je het per geval instellen.

Ik ben ook al een paar keer tegen dingen aan gelopen die hij niet goed
doet (dwz situaties waarin bepaalde files niet gezien worden die hij
wel zou moeten zien voor dat commando).
0 new messages