2016-05-10 4 views
0

Ich habe meinen Kopf versucht, das Bash-Äquivalent eines Csh-Alias ​​zu erstellen. Die recht einfach Alias ​​in csh ist:Wie man ein Bash-Äquivalent eines Csh-Alias ​​erzeugt, der eine Variable setzt

alias gfiles='files="\`grep -l \\!*\`"; echo $files' 

In bash wird ein Alias ​​nicht wegen der Parameterersetzung arbeiten und eine Funktion wird nicht funktionieren, weil es eine Variable in den Eltern-Shell setzen muss. Dieser Alias ​​ermöglicht Ihnen, vi oder ls oder mehr die passenden Dateien. Das Echo ist nicht unbedingt notwendig, aber ich habe es nützlich gefunden. Irgendeine Idee, wie man das Äquivalent in bash macht?

+0

Huh? Funktionen können absolut Variablen in den Aufrufern setzen; Sie laufen nicht in Unterprozessen, außer wenn Sie etwas tun, das dies erzwingt. –

+2

die besagt, dass die Verwendung einer Skalarvariablen ** (eine einzelne Zeichenfolge) zum Speichern einer ** Liste ** von Dateinamen (von denen jeder eine Zeichenfolge selbst ist) äußerst schlecht ist. Was passiert, wenn Namen mit Leerzeichen gespeichert werden müssen? Eine geeignete Vorgehensweise besteht darin, ein Array zu verwenden. –

Antwort

2

Funktionen werden nicht in einem Kind ausgeführt, daher können sie auf jeden Fall Umgebungsvariablen festlegen.

gfiles() { 
    files="$(grep -l "[email protected]")" 
    echo "$files" 
} 

(Ich bin nicht sicher, was Ihr Alias ​​tut;. Ich vermute, dass es einen Tippfehler)

+0

Der Alias ​​ist ein Versuch, einen Csh-Alias ​​in eine Bash-Datei umzuschreiben. Also, aufgeräumt, sollte das Ziel 'grep' innerhalb der Funktion' grep -l $ * 'sein, da das' \\! * 'Die csh-Syntax für die Argumente des csh-Alias ​​ist –

+0

@CraigEstey: Ah, Ok. In diesem Fall ist die korrekte Ersetzung "$ @", was die Argumente nicht wiedergibt. Vielen Dank. Bearbeitete die Antwort. – rici

Verwandte Themen