Führen Sie zwei Befehle mit einem Argument aus (ohne Skripting)

Führen Sie zwei Befehle mit einem Argument aus (ohne Skripting)

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 zshkönnen Sie anonyme Funktionen verwenden:

(){stat $1; file $1} filename

Mit esLambdas:

@{stat $1; file $1} filename

Sie können auch Folgendes tun:

{ stat -; file -;} < filename

(Führen Sie das staterste aus, da dadurch filedie 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 bashund zsh. Das funktioniert auch in mkshund , dashaber nur wenn interaktiv. In AT&T ksh funktioniert das nur, wenn sich das file "$_"auf einer anderen Leitung befindet als das stateine.

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.

verwandte Informationen