Bash: Überschreiben von ls -la mit ls -la | mehr (grundlegendes Bash-Scripting-Problem)

2096
sixtyfootersdude

Ziemlich neu beim Bash-Scripting. Der Versuch, den Befehl ls -la zu überschreiben, lautet: ls -la | Mehr

(Scheint nützlicher für mich).

Ich fügte das am Ende meines hinzu .bashrc.

154 # alias 'ls -la'='ls -la | more' 155 # this did not work because aliases 156 # are not allowed to have spaces in 157 # them. => have to make function: 158 ls() { 159 if [[ $@ == "-la" ]]; 160 then 161 echo "test"; 162 command ls -la | more; 163 else 164 command ls "$@"; 165 fi; 166 } 

Ich erhalte diese Fehlermeldung, wenn ich ein neues Terminal öffne:

bash: /users/me/.bashrc: line 158: syntax error near unexpected token `(' bash: /users/me/.bashrc: line 158: `ls() {' 

Wenn ich functionvorher hinzufüge, ls() {gibt es keine Beschwerden, aber das Verhalten von ls bleibt unverändert. Vielen Dank.

Aktualisieren

Beim Versuch, das Problem einzugrenzen, tat ich Folgendes:

159 ls() { 160 #if [[ $@ == "-la" ]]; 161 # then 162 echo "test" 163 # command ls -la | grep vim; 164 #else 165 # command ls "$@"; 166 #fi; 167 } 

aber ich bekomme immer noch den gleichen fehler. Ich denke, das Hauptproblem kann sein, dass es in der bashrc-Datei ist?

Aktualisieren

Seltsamerweise funktioniert das

159 function ls() { 160 #if [[ $@ == "-la" ]]; 161 # then 162 echo "test" 163 # command ls -la | grep vim; 164 #else 165 # command ls "$@"; 166 #fi; 167 } 
0

3 Antworten auf die Frage

4
GreenMatt

Mir ist klar, dass dies nicht genau das ist, worum Sie fragen, aber ich erwähne es, falls Sie nicht über diese Art von Lösung nachgedacht haben. Nach meiner Erfahrung besteht die übliche Möglichkeit, dies zu umgehen, indem ein Alias ​​ohne Leerzeichen erstellt wird, zB:

alias llm="ls -la | more" 

Dies ist viel schneller und einfacher als das Schreiben eines Skripts. FWIW, ich habe dies auf einem FreeBSD 5.3-System getestet, auf dem Bash 3.0 ausgeführt wird.

Danke für den Kommentar. Nachgedacht aber lieber die Skriptlösung. sixtyfootersdude vor 14 Jahren 0
1
njd

Ich kann dies auf Bash-3.00.16 unter Solaris 10 oder Cygwin nicht reproduzieren, aber es sieht so aus, als würde Ihre Bash die Zeile 158 als Aufruf des lsBefehls und nicht als Funktionsdefinition analysieren.

Das Präfix "function" ist optional, aber wenn Ihre Bash die Definition akzeptiert, ist dies eine sinnvolle Problemumgehung. Die Bedeutung der Funktion wird dadurch in keiner Weise geändert.

Welches Betriebssystem und welche Bash-Version verwenden Sie übrigens?

uname -a bash --version 
Laufen Solaris 10 mit der gleichen Bash wie Sie. Meine Vermutung war, dass es nur ein Fehler war mit den Räumen oder so ähnlich. Oder vielleicht Klammern. Haben Sie meinen Code direkt kopiert? Und es hat funktioniert? Danke für die Hilfe! sixtyfootersdude vor 14 Jahren 0
Ja, ich habe es kopiert und genau in meine .bashrc eingefügt, die Zeilennummern entfernt und es wurde kein Fehler gemeldet. njd vor 14 Jahren 1
sehr seltsam .. Keine Ahnung, was der Fehler vermuten lässt? sixtyfootersdude vor 14 Jahren 0
Ok, das funktioniert jetzt meistens. Hat die if-Aussage jemals für Sie richtig gewertet? Dh: habe `ls -la | mehr ausführen? sixtyfootersdude vor 14 Jahren 0
HA! Ich habe ein Alias, das ls übernimmt und es auf ls -F abbildet, und das hat alles durcheinander gebracht. Problem gelöst. sixtyfootersdude vor 14 Jahren 0
D'oh! Die einfachsten Lösungen sind immer die besten. Schön zu wissen, dass Sie es am Ende behoben haben. njd vor 14 Jahren 0
1
SuperMagic

ersetzen mit:

 Funktion ls { if [[$ @ == "-la"]] dann Echo "Test" / bin / ls -la | Mehr sonst / bin / ls "$ @" fi;  } 

Hinweis: Sie müssen den absoluten Pfad auf den tatsächlichen ls-Befehl innerhalb des if- oder referenzierten Befehls verweisen, der die gleiche Funktion und den ... stackoverflow erneut aufruft. :-)

BEARBEITEN: Ja, das Befehlsschlüsselwort ist eine bessere Möglichkeit, Alias-Lookups zu verhindern.

Ich bin mir ziemlich sicher, dass dies das Befehlsschlüsselwort ist. sixtyfootersdude vor 14 Jahren 0
Die Verwendung des Befehls 'Befehl' (!) Verhindert die Suche nach Funktion / Alias. njd vor 14 Jahren 1
@njd: danke für die klärung. sixtyfootersdude vor 14 Jahren 0