2017-07-04 5 views
0

Ich versuche, ein Alias ​​mit If-then-else Bedingung auf ein Ergebnis des Befehls zu haben.tcsh alias mit if-then-else Bedingung

  1. wird das Alias ​​ein Dateimuster
  2. erhalten, wenn es nur eine Datei ist, wird es die Datei
  3. öffnen, wenn es mehr oder weniger als 1 Dateien - es mit einer Meldung anzeigt.

der Alias ​​ich versucht habe, ist:

alias atest 'if \("ls \!:1" > 0 \) "nedit ls \!:1" else "echo cant open the file" ' 
+0

Ich glaube nicht, dass Sie es mit einem Alias ​​tun können. Verwenden Sie ein Shell-Skript. – Barmar

+0

Wenn Sie 'ls \ !: 1' in Anführungszeichen setzen, wird der Befehl nicht ausgeführt. Sie vergleichen also nur die Zeichenfolge mit "0" und zählen nicht die Anzahl der Dateien, die mit dem Muster übereinstimmen. – Barmar

+0

Sie brauchen etwas wie '\ 'ls \ !: 1 | wc -l \ "" um die Anzahl der Zeilen zu zählen, die mit dem Befehl gedruckt wurden. – Barmar

Antwort

2

Sie können dies mit einem Alias ​​nicht. Ein Alias ​​kann nur in einen einzeiligen Befehl expandiert werden, aber if erfordert mehrere Zeilen.

Verwenden Sie stattdessen ein Shell-Skript. Das Skript muss nicht in der Sprache sein, die Sie interaktiv verwenden. Sie können also die POSIX-Shell verwenden, die im Allgemeinen als besser für die Programmierung gilt als die C-Shell (siehe Csh Programming Considered Harmful).

#!/bin/sh 
if [ $# -eq 1 ] 
then nedit "$1" 
else 
    echo "Can't open the file" 
    exit 1 
fi 

Setzen Sie diese in einer Datei namens atest, geben Sie ihm Berechtigungen ausführen, und es in ein Verzeichnis kopieren, die in Ihrem $PATH ist.

+0

Sie könnten auch 'alias atest source ~/.tcsh/atest.tcsh' verwenden (das hat den Nachteil, dass Sie vorsichtig sein müssen, um den globalen Shell-Zustand nicht zu überlisten, obwohl das Ändern des Shell-Status auch ein Feature in einigen sein könnte Fälle). – Carpetsmoker

+0

@Carpetsmoker Ich habe tcsh schon lange nicht mehr benutzt. Kann ein Skript mit Befehlszeilenparametern 'source' ausgeführt werden? – Barmar

+0

Nicht direkt, aber Sie können Variablen im Parent-Skript festlegen, die das Quellskript lesen kann. – Carpetsmoker