.png)
Wie kann ich mit einer Eingabe zwei Befehle ausführen, ohne die Eingabe zweimal einzugeben?
Beispielsweise verrät der Befehl stat viel über eine Datei, gibt aber keinen Aufschluss über deren Dateityp:
stat fileName
Der Dateibefehl gibt an, um welchen Typ es sich handelt:
file fileName
Sie können dies folgendermaßen in einer Zeile ausführen:
stat fileName ; file fileName
Sie müssen den Dateinamen jedoch zweimal eingeben.
Wie können Sie beide Befehle auf derselben Eingabe ausführen (ohne die Eingabe oder eine Variable der Eingabe zweimal einzugeben)?
Ich weiß, wie man unter Linux Ausgaben weiterleitet, aber wie leitet man Eingaben weiter?
Antwort1
Ich werde dafür wohl einen Schlag auf die Finger kriegen, hier ist eine Hack-Kombination aus Bash-Brace-Erweiterung und Eval, die den Trick zu tun scheint
eval {stat,file}" fileName;"
Antwort2
Mit zsh
können Sie anonyme Funktionen verwenden:
(){stat $1; file $1} filename
Mit es
Lambdas:
@{stat $1; file $1} filename
Sie können auch Folgendes tun:
{ stat -; file -;} < filename
(Führen Sie das stat
erste aus, da dadurch file
die Zugriffszeit aktualisiert wird).
Ja, würde ich:
f=filename; stat "$f"; file "$f"
allerdings ist das der Zweck von Variablen.
Antwort3
Hier ist eine andere Möglichkeit:
$ stat filename && file "$_"
Beispiel:
$ stat /usr/bin/yum && file "$_"
File: ‘/usr/bin/yum’
Size: 801 Blocks: 8 IO Block: 4096 regular file
Device: 804h/2052d Inode: 1189124 Links: 1
Access: (0755/-rwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)
Context: system_u:object_r:rpm_exec_t:s0
Access: 2014-06-11 22:55:53.783586098 +0700
Modify: 2014-05-22 16:49:35.000000000 +0700
Change: 2014-06-11 19:15:30.047017844 +0700
Birth: -
/usr/bin/yum: Python script, ASCII text executable
Das funktioniert in bash
und zsh
. Das funktioniert auch in mksh
und , dash
aber nur wenn interaktiv. In AT&T ksh funktioniert das nur, wenn sich das file "$_"
auf einer anderen Leitung befindet als das stat
eine.
Antwort4
Diese Antwort ähnelt einigen anderen:
StatistikDateiname && Datei !#:1
Im Gegensatz zu den anderen Antworten, die automatisch wiederholen,zuletztArgument aus dem vorherigen Befehl, dieses erfordert, dass Sie zählen:
ls -ldDateiname && Datei !#:2
Im Gegensatz zu einigen anderen Antworten sind hierfür keine Anführungszeichen erforderlich:
stat "useless cat" && file !#:1
oder
echo Sometimes a '$cigar' is just a !#:3.