csh/sh pour la boucle - comment?
je suis en train d'écrire une boucle qui exécute 2 scripts sur FreeBSD. Je ne m'inquiète pas si il est écrit en sh ou csh. Je veux quelque chose comme:
for($i=11; $i<=24; $i++)
{
exec(tar xzf 'myfile-1.0.' . $i);
//detect an error was returned by the script
if ('./patch.sh')
{
echo "Patching to $i failed\n";
}
}
Personne ne sait comment faire s'il vous plaît?
Grâce
Pourquoi êtes-vous à l'aide de csh pour l'écriture de scripts qui n'est PAS à quoi il était destiné. Utilisez bash, ksh ou même de poisson à la place.
pas le choix. c'est la seule coquille sur freebsd je peux utiliser. sauf que je peux utiliser sh, dans ce cas, je suis à la recherche d'une sh de la solution.
FreeBSD n'a pas le poisson???
qui sait? Si c'est un script sh ferait.
pas le choix. c'est la seule coquille sur freebsd je peux utiliser. sauf que je peux utiliser sh, dans ce cas, je suis à la recherche d'une sh de la solution.
FreeBSD n'a pas le poisson???
qui sait? Si c'est un script sh ferait.
OriginalL'auteur Paul J | 2011-05-13
Vous devez vous connecter pour publier un commentaire.
csh boucles fines, le problème, c'est que vous êtes en utilisant exec, qui remplace le programme actuel (qui est le shell) avec un autre, dans le même processus. Depuis d'autres ont fourni sh versions, voici un csh:
Pas sûr au sujet de la
./patch.sh
êtes vous test de son existence ou de son exécution? Je suis en cours d'exécution ici, et de tester le résultat - true signifie qu'il est retourné à zéro. Sinon:Oui, je suis d'accord, mais qui n'aide pas à l'OP.
incrément
i
??bien repéré!
Je suggère
#!/bin/csh -f
. Le-f
indique au shell de ne pas la source de vos fichiers de démarrage,.cshrc
et.login
, ce qui rend le script de s'exécuter plus rapidement et évite les dépendances. (Cela s'applique uniquement aux csh/tcsh; sh et bash ont un-f
option, mais c'est tout à fait différent.)OriginalL'auteur cdarke
Typique de la façon de le faire dans sh est:
Noter que
seq
n'est pas standard. En fonction de la disponibilité des outils, vous pouvez essayer:ou
ou
J'ai fait quelques modifications: j'ai avorter si le goudron échoue et n'émettent pas de message d'erreur, depuis le goudron doit émettre le message d'erreur à la place du script.
OriginalL'auteur William Pursell
Wow! Pas de BASH. Et probablement pas Kornshell:
Écrit dans le plus pur Bourne shell juste comme Dieu l'a voulue.
Remarque vous devez utiliser le
expr
de commande pour ajouter 1 à$i
. Bourne shell ne pas faire des maths. Les backticks moyenne pour exécuter la commande et mettre la sortie standard de la commande en$i
.Kornshell BASH, et rendre les choses plus faciles, car ils peuvent faire des mathématiques et de ne plus complexe pour les boucles.
OriginalL'auteur David W.
Je pense que vous devriez utiliser bash. Je ne l'ai pas, ici, de sorte qu'il ne peut pas le tester, mais quelque chose le long de ce travail devrait:
EDIT: Viens de lire les commentaires et découvert il n'y a pas de bash dans FreeBSD installation par défaut. Donc, cela pourrait ne pas fonctionner du tout - je ne suis pas sûr au sujet des différences entre (t)csh et bash.
OriginalL'auteur Axel
Bien ce que je viens de faire est la suivante.
Charge sh shell et puis pour la boucle fonctionne comme sur linux.
OriginalL'auteur gnudna