2010-11-17 6 views

Répondre

6

Cela vous donnera le chemin d'accès shell Korn:

which ksh 

Et cela remplacera tralala dans tous les scripts shell:

sed -i 's/#!\/bin\/bash/#!insert escaped ksh path here/' *.sh 
+1

Peut-être vaut-il la peine de noter qu'il doit échapper à la corde qu'il insère. Mieux encore, je suppose qu'il est préférable d'utiliser quelque chose comme: 'echo 1/23 | sed 's ^/^ 2 ^''. De plus, vous n'avez pas besoin de '/ g', car il est à espérer qu'un seul par ligne ...:) –

3

Mettre cela dans la première ligne de chaque fichier (ligne tralala):

#!/usr/bin/env ksh

Si vous devez remplacer vous pouvez utiliser sed/awk: find -name '*.sh' | xargs perl -pi -e "s{^#!/usr/bin/sh}{#!/usr/bin/env ksh}"

+0

Qu'est-ce que c'est que ça? –

+0

Supprimé. C'est à partir d'un extrait que j'ai trouvé qui cherchait des fichiers .pl ET .cgi. Merci de l'avoir attrapé. –

3

Pour savoir où vit ksh:

whence -a ksh 

Pour modifier tous les scripts shell dans le répertoire courant à utiliser ksh:

Cela correspond aux sh ou bash et de préserver tous les espaces (et arguments) qui apparaissent après. Il agit uniquement sur la première ligne afin qu'il ne touche pas les lignes similaires qui peuvent apparaître plus tard dans le fichier.

Substituez l'emplacement réel de votre exécutable ksh ou utilisez /usr/bin/env ksh. Utilisez sed -i .bak si vous souhaitez sauvegarder les fichiers modifiés.

0

Cette commande localisera l'exécutable korn shell dans votre environnement UNIX:

which ksh 

Si aucune sortie est renvoyée, le korn shell est manquant. (Au moins ne pas trouvé dans votre environnement PATH.) Vous pouvez l'obtenir à partir du site KornShell ou l'installer via votre système de gestionnaire de paquets logiciels.

Pour remplacer la ligne d'interprète dans tous les scripts shell (* .sh), vous pouvez exécuter quelque chose comme ceci:

sed -i "s/^#\!.*$/#\!\/bin\/ksh/" *.sh 

L'option -i est d'éditer des fichiers en place. (Avertissement: Testez d'abord cette commande sans le -i, pour éviter les modifications de fichier.)

L'argument indiqué est le motif qui correspond à toutes les lignes commençant par "#!" et remplacez-les par "#!/bin/ksh". (Notez que certains caractères spéciaux doivent être échappés avec "\" avant.) Vous devrez peut-être personnaliser cet argument si ce n'est pas exactement le remplacement que vous recherchez.

+0

D'une manière ou d'une autre, j'obtiens une erreur: nom de variable non valide. Mais cela fonctionne: 'sed -i 's /^#\!.*$/#!\/ bin \/ksh /' * .sh' – danger89

0

Sur ma machine seulement cela fonctionne sed -i "s/^#\!.*/#\!\/usr\/bin\/perl/" *.sh Everyother jette une erreur.

Questions connexes