74 votes

Bash ou KornShell (ksh) ?

Je ne suis pas nouveau sur * nix, cependant ces derniers temps j’ai passé beaucoup de temps à l’invite de commandes. Ma question est quels sont les avantages d’utiliser le shell Korn (ksh) ou Shell Bash ? Où sont les pièges de l’utilisation de l’un sur l’autre ?

Vous cherchez à comprendre du point de vue d’un utilisateur, plutôt que purement scripting.

143voto

David W. Points 49436

La différence entre Kornshell et Bash sont minimes. Il y a certains avantages de l'un sur l'autre, mais les différences sont infimes:

  • BASH est beaucoup plus facile de définir une invite de commande qui affiche le répertoire courant. Faire la même chose dans Kornshell est hackish.
  • Kornshell a des tableaux associatifs et BASH n'est pas. Maintenant, la dernière fois que j'ai utilisé des tableaux Associatifs a été... Laissez-moi réfléchir... Jamais.
  • Kornshell poignées boucle syntaxe un peu mieux. Vous pouvez définir une valeur dans un Kornshell boucle et qu'il est disponible après la boucle.
  • Bash gère obtenir les codes de sortie de tuyaux d'une manière plus propre.
  • Kornshell a l' print commande qui est meilleure que l' echo commande.
  • Bash a onglet finitions. Dans les anciennes versions
  • Kornshell a l' r histoire de la commande qui me permet de rapidement réexécuter les anciennes commandes.
  • Kornshell a la syntaxe cd old new qui remplace old avec new dans votre répertoire et de Cd là-bas. C'est pratique quand vous avez sont dans un répertoire appelé /foo/bar/barfoo/one/bar/bar/foo/bar et vous avez besoin de cd d' /foo/bar/barfoo/two/bar/bar/foo/bar Dans Kornshell, vous pouvez simplement faire cd one two et être fait avec elle. En BASH, vous devriez cd ../../../../../two/bar/bar/foo/bar.

Je suis un vieux de la Kornshell gars parce que j'ai appris Unix dans les années 1990, et qui a été la coquille de choix alors. Je peux utiliser Bash, mais je suis frustré par elle à la fois parce que dans l'habitude j'utilise de la fonctionnalité mineure qui Kornshell a que BASH ne l'est pas et ça ne fonctionne pas. Donc, chaque fois que possible, j'ai mis Kornshell en tant que par défaut.

Cependant, je vais vous apprendre le BASH. Bash est maintenant mis en place sur la plupart des systèmes Unix ainsi que sur Linux, et il n'y a simplement plus de ressources disponibles pour l'apprentissage BASH et obtenir de l'aide de Kornshell. Si vous avez besoin de faire quelque chose d'exotique dans BASH, vous pouvez aller sur Stackoverflow, de poser votre question, et vous aurez une douzaine de réponses en quelques minutes, et certains d'entre eux peuvent même être correct!.

Si vous avez un Kornshell question et de le poster sur Stackoverflow, vous aurez à attendre quelques vieux passé leur premier pirate comme moi se réveiller de sa sieste avant d'obtenir une réponse. Et, oubliez obtenant aucune réponse, si ils sont de servir le pudding dans la vieillesse à la maison ce jour-là.

BASH est tout simplement la coquille de choix maintenant, donc si vous avez quelque chose à apprendre, pourrait tout aussi bien aller avec ce qui est populaire.

48voto

j.e.hahn Points 212

Bash.

Les différents UNIX et Linux implémentations diffèrent au niveau de la source implémentations de ksh, dont certains sont de véritables ksh, certains sont pdksh de mise en œuvre et certains sont juste des liens symboliques à un autre shell qui a une "ksh" de la personnalité. Cela peut conduire à bizarre différences dans le comportement de l'exécution.

Au moins avec bash, vous pouvez être sûr que c'est une base de code unique, et tout ce que vous devez vous soucier est ce qu' (généralement minimum) version de bash est installé. Avoir fait beaucoup de scripts sur presque tous les modernes (et pas-si-moderne) UNIX, programmation bash est plus fiable conforme à mon expérience.

36voto

Henk Langeveld Points 2959

Je suis un korn-shell bigotvétéran, assurez-vous donc que je parle à partir d'un certain point de vue.

Je suis à l'aise avec le Bourne shell, ksh88, et ksh93, et je sais que les fonctions qui sont prises en charge dans qui.

Pour une utilisation interactive, prendre ce qui répond à votre besoin. Expérience. J'aime être en mesure d'utiliser le même shell pour l'utilisation interactive et de la programmation.

Je suis passé de ksh88 sur SVR2 à tcsh, à ksh88sun et ksh93. J'ai essayé de bash, et détesté parce qu'il aplatie mon histoire. Puis j'ai découvert

shopt -s lithist

et tout allait bien. (Le lithist option assure que les nouvelles lignes sont conservées dans votre commande l'histoire.)

Pour la programmation shell, j'avais sérieusement recommande ksh93 si vous voulez une programmation cohérente de la langue, de la bonne conformité POSIX, et de bonnes performances, comme de nombreuses communes des commandes unix peut être disponible en tant que fonctions internes.

Si vous voulez la portabilité utiliser au moins deux. Et assurez-vous que vous avez une bonne suite de tests.

Il y a beaucoup de différences subtiles entre les coquilles. Considérons par exemple la lecture à partir d'un tuyau:

b=42 && echo one two three four |
    read a b junk && echo $b

Ceci va produire des résultats différents selon les coquilles. Le korn-shell s'exécute pipelines à partir de l'arrière vers l'avant; le dernier élément dans le pipeline s'exécute dans le processus actuel.

Un autre exemple illustrant la cohérence: L' echo commande en elle-même, qui a été rendu obsolète par la scission entre BSD et unix system v, et chaque introduit leur propre convention pour ne pas imprimer les retours à la ligne (et d'autres comportements). Le résultat de ce qui peut encore être vu dans beaucoup de 'configure' scripts.

Ksh a pris une approche radicale de la que - et introduit l' print de commande, qui supporte les deux méthodes (l' -n option de BSD, et le second \c caractère spécial de SYSV)

Cependant, pour le sérieux de programmation de systèmes, que je recommanderais à autre chose qu'une coquille, comme python, perl. Ou de prendre une étape supplémentaire, et utiliser une plate-forme comme des marionnettes, qui permet de surveiller et de corriger l'état de l'ensemble des grappes de systèmes, avec une bonne vérification.

La programmation Shell est comme nager dans des eaux inconnues, avec de mauvaises cartes de démarrage.

Programmation dans n'importe quelle langue il est nécessaire de connaître sa syntaxe, ses interfaces et de comportement. La programmation Shell n'est pas du tout différent.

11voto

Hank Gay Points 36173

N’oubliez pas `` .

9voto

Kristian Points 71

Il s’agit d’un peu d’une bataille de Linux Unix vs. Plupart, si pas toutes les distributions Linux ont installé de bash et ksh en option. Plupart des systèmes Unix, Solaris, AIX et HP-UX ont ksh comme valeur par défaut.

Personnellement j’ai toujours utiliser ksh, j’adore l’achèvement vi et j’ai assez bien utiliser Solaris pour tout.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X