wie schreiben foreach in einer Zeile in der csh?
Manchmal benutze ich gleiche foreach-Betrieb mit unterschiedlichen Ziel-Dateien csh.
Wenn ich geben kann foreach-Befehl in einer einzigen Zeile konnte ich problemlos Ersatz der target-Dateinamen, den Prozess zu wiederholen.(Ich in der Regel verwenden `finden . -name ...` target-Dateien)
Für die Zwecke dieser Frage, nehmen wir an, ich möchte die Katze alle *.txt-Dateien.
$ foreach i (*.txt)
foreach? cat $i
foreach? end
Lese ich https://unix.stackexchange.com/questions/32873/running-a-full-foreach-command und versuchte
alias disp 'echo "foreach i (*.txt)"; echo "cat "\$"i"; echo "end"; | /bin/csh'
geben, wenn ich disp
es gibt mir Invalid null command
.
Wenn ich es tun kann, in einer einzigen Zeile, die ich tun könnte !foreach:gs/\.c\>/.h/
(haben die gleiche einbauen .c mit .h).
Wie kann ich es tun?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Diese Methode funktioniert für mich:
printf 'foreach f ( 1 2 3 )\n echo $f \n end \n' | tcsh
Es gibt keinen einfachen Weg, um die foreach-in einer Zeile unter tcsh.
Jedoch durch die Verwendung von alias zu erhalten, können Sie etwas sehr nah zu Ihrer Frage.
Können Sie anrufen
disp
in Ihrem terminal.Wenn Sie wollen, um direkt das Ergebnis in ein Rohr, dann
echo `disp` | grep foobar
.Manchmal brauchen wir das Ergebnis speichern, bevor die weitere Verarbeitung:
set foo=`disp`
Habe ich versucht zu beantworten, aber es sieht es gibt keinen Weg. Verwenden Sie einfach die bash einfach durch ändern der shell.
% bash
$ for f in *txt; do echo $f; done
$ exit
%
Verwenden die bash -c:
$ bash -c " for i in *.txt; do cat $i; done'
Für Ihre erste Frage, ich weiß nicht, wie diese zu schreiben in .cshrc-Datei direkt.
Aber ich werde eine flexible Möglichkeit, dies zu tun.
1: Schreiben Sie ein shell-Skript:
/home/user/disp.sh (oder einen beliebigen Pfad, den Sie wollen)
Oder haben Sie nur die csh-shell:
Fügen Sie neue alias-Befehl, um die
.cshrc
Dateialias disp /home/user/disp.sh
Erneut csh-shell (oder relogin)
csh
Ihre zweite Frage, ich habe es auf der gleichen disp.sh Skript
Diesem Beispiel ist geschrieben in bash-shell-Skript.
Können Sie einfach geben Sie
disp -d 1 -e c
alle zu finden .c-Datei im aktuellen Pfad ist.(-d bedeutet, dass die Tiefe der Datei, die gestartet wird vom aktuellen Pfad, -e bedeutet, dass die Erweiterung der Dateien)
for i in 1 2 3; do echo $i; done
.