2009-07-14 7 views
0

Je suis ce qui suit dans un fichier qui est source à la fois par .bashrc et .zshrc. La syntaxe provient du site.Pour faire une clause if dans Sh

if $SHELL=/bin/zsh                
     then 
    # to not java .class when running java 
      myclasslist() { reply=(${$(ls *.class)%.class}) } 
      compctl -K myclasslist java 
fi 

Zsh et Bash s'en foutent tous les deux.

Comment pouvez-vous faire une if-clause dans sh?

+0

Merci pour vos réponses! –

Répondre

4

Vous devez envelopper votre condition dans l'opérateur de test (ainsi que des citations à prendre l'habitude):

En shell:

#!/bin/sh 
if [ "$SHELL" = "/bin/zsh" ]; then 
     # do your thing 
fi 

En bash:

#!/bin/bash 
if [ "$SHELL" == "/bin/zsh" ]; then 
    # just do it! 
fi 
+0

Votre réponse me suggère qu'il n'y a aucun moyen de trouver le même fichier pour Bash/Zsh, car nous ne pouvons pas utiliser la même syntaxe dans la clause if. Est-ce correct? –

+0

@Masi - Je n'ai pas trop exploré les nuances du shell, mais je pense que tant que la ligne shebang est définie (par exemple '#!/Bin/sh'), l'obtention du fichier ne devrait pas poser de problème. Cela fonctionne pour moi quand je trouve le premier exemple de bash sans problème. – seth

2

Vous avez besoin du test alias [ commande:

if [ "$SHELL" = "/bin/zsh" ] 
then 
    myclasslist() { reply=(${$(ls *.class)%.class}) } 
    compctl -K myclasslist java 
fi 
0

Sur le site Web que vous mentionnez, ne pas utiliser l'opérateur de test ([]) parce qu'ils disent:

Par exemple, le chat retourne 0 si elle fonctionne avec succès, et 1 si elle rencontre une erreur

le cas doit être suivie d'une « déclaration booléenne » et si cette déclaration renvoie 0, le « puis » est en fait exécuté ...

Dans votre cas, la réponse de Seth est ce que vous » re cherche.

Questions connexes