Previous Up Next

4.2.3  Ik wilde via de shell het een en het ander uitvoeren, maar dat lukt niet; een aantal karakters worden blijkbaar niet aanvaard door mijn commando.

Het probleem is dat de shell met onder andere de volgende tekens of tekenreeksen gaat lopen:
( ) [ ] { } $ \ " ' * ? < > & || && ;; ; |

Deze tekens worden allemaal door de shell voor speciale tekens aanzien:

De shell expandeert deze karakters altijd, voor eender welk argument, tenzij er geen bestand is dat aan de wildcards voldoet. Een programma krijgt dus nooit een “*” teken te zien, maar altijd hetgeen de shell daarvoor invult. Wens je de tekens te behouden dan kan je ze escapen door er een backslash voor te zetten (bv. \* voor een letterlijke “*”). De shell doet die backslash weer weg. Je kan ook je hele argument tussen enkele aanhalingstekens zetten. (bv ’be*?’ om deze tekens letterlijk mee te geven). Wat er dus gebeurde met \[bla\] was dat dit aan het programma werd meegegeven als [bla].

Je kan altijd checken wat de shell doet door

~$ echo be*

in te typen, of

~$ echo \[bla\]

Een ook vaak voorkomend probleem zijn bestandsnamen die beginnen met een -: het programma zal deze interpreteren als programma-optie. Om dit te vermijden moet je duidelijk maken dat je geen programma-opties meer zal gebruiken. Dit doe je door -- na al je argumenten te zetten.

Een voorbeeld:


BCOL-FAQ : De Belgische Linux nieuwsgroep vragen
Previous Up Next