2010-04-14 22 views
2

Quelqu'un peut-il m'éclairer pourquoi ce qui suit ne fonctionnera pas?Le script shell KSH ne s'exécute pas et renvoie 127 (non trouvé)

$ groups 
    staff btgroup 
$ ls -l 
    total 64 
    -rw-rw---- 1 sld248 btgroup  26840 Apr 02 13:39 padaddwip.jks 
    -rwxrwx--- 1 sld248 btgroup  1324 Apr 02 13:39 padaddwip.ksh 
$ ./padaddwip.ksh 
    ksh: ./padaddwip.ksh: not found. 
$ echo $? 
    127 

Ceci est presque identique à un autre script qui fonctionne très bien. Je ne vois aucune différence entre les deux en termes d'autorisations ou de propriété.

Répondre

4

Il peut y avoir 2 problèmes:

  • La ligne Shebang est incorrecte (comme l'a fait allusion à ghostdog)

  • Le script a été sauvegardé à partir de Windows et a des fins de ligne DOS.

Pour ce dernier, faire

head padaddwip.ksh | cat -vet | head -1 

La commande devrait produire la ligne tralala ne se termine pas avec ^M. Si elle ne se termine avec ^M qui est un fichier codé DOS, et le correctif est:

cp padaddwip.ksh padaddwip.ksh.bak 
dos2unix padaddwip.ksh.bak > padaddwip.ksh 
./padaddwip.ksh 

Sur les systèmes sans dos2unix, vous pouvez utiliser

cat padaddwip.ksh.bak | tr -d "\r" > padaddwip.ksh 
+0

OK, merci DVK, je pense que vous avez raison. Mon autre script qui fonctionne n'a pas le^M à la fin de chaque ligne, mais le script qui ne fonctionne pas a le^M à la fin de chaque ligne. Malheureusement, dos2unix n'est pas installé sur mon serveur AIX (et je n'ai pas de privilèges root). Je vais harceler les pouvoirs en place. Y at-il un moyen de FTP un fichier sur un serveur AIX qui serait dépouiller/convertir correctement? –

+0

@Chris - Oui. Définir le mode "ascii" dans FTP – DVK

+0

@Chris - aussi, en l'absence de dos2unix, il suffit de lancer 'cat padaddwip.ksh.bak | tr -d "\ r"> padaddwip.ksh' – DVK

1

juste une supposition, vérifiez votre shebang dans padaddwip.ksh. ça devrait être quelque chose comme #!/bin/ksh. Si ce n'est pas le cas, utilisez which ksh pour voir où votre ksh est installé. Vous pouvez également exécuter votre script en appelant l'interpréteur (ksh), par exemple

$ /bin/ksh padaddwip.ksh

une autre façon que vous pouvez faire est de changer votre tralala à #!/usr/bin/env ksh

Aussi, assurez-vous que l'utilisateur d'exécuter le script a son groupe primaire btgroup

+0

La première ligne du script affiche: #!/ bin/ksh Et 'quel ksh' montre:/usr/bin/ksh –

+0

alors pourquoi ne pas essayer de changer votre shebang à celui de '/ usr/bin/ksh' et voir. – ghostdog74

+0

Merci ghostdog74, je pense que votre recommandation va fonctionner. Fait intéressant, la sortie de/bin/ksh padaddwip.ksh est: $/bin/ksh padaddwip.ksh padaddwip.ksh [13]:^M: non trouvé. padaddwip.ksh [14]:^M: non trouvé. padaddwip.ksh [17]:^M: non trouvé. Consignation de toutes les sorties dans padaddwip.log .... Est-ce ces caractères^M qui causent le problème? –

1

Une autre façon de débarrasser vos scripts de ^M ennuyeux caractères serait d'ouvrir le fichier en vi et tapez :%s/^M//g (sed à l'intérieur vi) où le ^M ici est créé en tapant Ctrl-V puis Ctrl-M. Personnellement, j'aime cette méthode car vous n'avez pas besoin de créer un fichier de sauvegarde et vous voyez immédiatement les résultats - juste une habitude OCD de la mienne-

En outre, j'ai eu des problèmes étranges avec l'utilisation tr et les caractères de contrôle tels que \r il s'agissait peut-être d'un problème spécifique à un shell ou à un site, mais dans ce cas je devais utiliser la méthode ci-dessus ou sed de la ligne de commande ... très semblable à ce que DVK montre ci-dessus; comme sed -e 's/^M//g' padaddwip.ksh.bak > padaddwip.ksh où vous créez le ^M en faisant Ctrl-V puis Ctrl-M (en mode éditeur vi).

+0

Je vais admettre de ne pas savoir VI du tout, mais merci pour la réponse utile. –

0

le shebang est mauvais.

Testez le scénario avec l'interpréteur shell sur la cmdline.

ksh padaddwip.ksh