bash vs csh vs altri - che è meglio per la manutenzione delle applicazioni? [duplicare]

StackOverflow https://stackoverflow.com/questions/4317247

  •  29-09-2019
  •  | 
  •  

Domanda

  

Eventuali duplicati:
   Cosa shell Linux dovrei usare?

Sto iniziando a ottenere abile in ambiente Linux e sto cercando di scegliere un arma di scelta in termini di scripting di shell dei comandi (come io sono ancora un grande n00b a questo) che mi (e altri) aiuterà gestire, testare e gestire una serie di applicazioni lato server in esecuzione su un ambiente * nix.

La mia domanda è: Che cosa è (sono) la shell di comando preferito (s) là fuori quando i seguenti criteri vengono considerati:

  1. Quanto è facile da imparare / capire per uno sviluppatore junior che non ha mai avuto un'esposizione a scripting di shell?

  2. C'è una grande piscina di sviluppatori là fuori che conosce questo script di shell?

  3. E 'sicuro e facile da usare -? Errori di script sarà in silenzio o danno output di errore intelligente, si è lasciare che le riprese non iniziati loro stessi nel piede

  4. Come portatile è vero? - posso aspettarmi lo stesso script per l'esecuzione in OpenSolaris così come RedHat, FreeBSD? (Sintassi dei comandi e delle opzioni concesse per OS specifiche cambieranno di conseguenza)

  5. Come standard è vero? E 'prevista per essere incluso in più di distro di * NIX o lo fa deve essere installato in aggiunta?

Capisco che ci sono campi di là fuori che detengono forti sentimenti per / contro specifici shell dei comandi, io sono solo alla ricerca di un parere informato.

È stato utile?

Soluzione

In questi giorni, quasi ogni sistema di non-embedded (o grande embedded) che opera ha un POSIX: 2001 aka singolo Unix v3 livello di compatibilità . Questo è nativa su piattaforme UNIX (Linux, Mac OS X, Solaris, * BSD, ecc) e installabile su altre piattaforme, come Windows e Android. POSIX specifica un guscio linguaggio , comunemente noto come POSIX sh. Questo linguaggio è derivato dalla Bourne shell.

sistemi

??La maggior parte UNIX hanno uno dei due implementazioni di POSIX sh: ksh o bash, che hanno altre caratteristiche utili rispetto a POSIX. Tuttavia alcuni sistemi tradizionali di meno (soprattutto quelli incorporati) possono avere caratteristiche solo POSIX-mandato.

In considerazione i vostri obiettivi, vedo tre scelte:

  • limitarvi a POSIX sh. Pro: non dovete preoccuparvi di varianti diverse, dal momento che c'è uno standard e implementazioni compatibili sono facilmente disponibili. Con:. Non beneficiare di bash e le estensioni di ksh
  • Usa l'intersezione di ksh e bash. Questo è attraente in apparenza, ma non significa che dovete utilizzare due documenti di riferimento invece di uno solo - e anche le caratteristiche che bash e ksh hanno in comune non utilizzare sempre la stessa sintassi. Capire che quello che si desidera utilizzare su un dato sistema è anche un dolore.
  • Scegliere una delle ksh o bash. Sia bash e ksh sono disponibili su tutte le piattaforme Unix-like e Windows. Entrambi hanno un'implementazione open source (l'unica per bash, ATT ksh93 per ksh) che può essere installato sulla maggior parte delle piattaforme. Mi piacerebbe andare per bash su ksh per due motivi. In primo luogo, è il default su Linux, in modo da trovare più persone che sono abituati ad esso. In secondo luogo, ci sono sistemi che vengono con un vecchio, meno-optional attuazione ksh; anche se è possibile installare ksh93, è un'altra cosa che dovete pensare durante la distribuzione.

Dimenticate csh per lo scripting, e dimenticare zsh se si vuole comune la disponibilità di default.

Si veda anche Quali sono le differenze fondamentali tra la corrente principale * NIX conchiglie? , in particolare il “per lo scripting” parte della mia risposta .

Si noti che la programmazione della shell coinvolge altre utilità oltre il guscio. POSIX specifica quelle altre utilità. “Bash più altre utilità POSIX” è una scelta ragionevole, distinto da “utilità POSIX (compresi sh)”.

Altri suggerimenti

csh è quasi sempre sbagliato .

shell Z (zsh)

Si dice zsh è il più potente per ora quindi vi consiglio di provarlo.

  1. Non importa quale shell si impara - la loro sintassi è molto simile. Solo incorporato comandi possono variare leggermente. Ma non scegliere quelli vecchi e non più mantenuto.
  2. Bash è il più popolare. Ma quasi tutti i comandi in bash lavora in zsh allo stesso modo. Ci sono alcune eccezioni, naturalmente.
  3. per quanto ne so, ogni shell gestisce allo stesso modo. Ma attenzione - gusci sono stupidi, non sono intelligenti come i linguaggi di programmazione
  4. .
  5. Ho visto di lavoro zsh su tutti i sistemi Linux, FreeBSD e OpenSolaris.
  6. Vedere 4. distribuzioni hanno zsh nelle loro pronti contro termine.

Perché preferisco zsh (Z shell) per bash :

  • file corrispondenti in questo modo: for file in ./**/*.java; do ... (I ./**/*.ext media)
  • mi vuole confermare quando faccio rm *:)
  • scheda-completamento automatico è molto meglio, posso scrivere dmdomi[tab] e suggerisce dnddomainname. java vuole nome della classe come primo parametro, zsh suggerirà tutte le classi disponibili nel pacchetto e tutti sottopackage.

Ma non sono limitati a zsh solo. Se qualcosa non funziona per voi, basta scrivere in bash o sh. Questo è ciò che è "#!/bin/bash" in cima alla sceneggiatura di. : -)

Per avviare rapidamente, utilizzare il mio .zshrc config: http://www.rozne.geozone.pl /.zshrc L'unica cosa che si dovrebbe cambiare c'è export LANG="pl_PL.UTF-8". Probabilmente non si vuole locale polacca.

Gli script di shell per qualsiasi shell * nix sono generalmente apparentemente semplice. cose facili sono di solito facile, a volte le cose difficili sono facili, a volte le cose facili apparentemente sono difficili. No guscio è particolarmente meglio degli altri in questo settore, ma alcuni sono peggiori (non posso consigliare seriamente csh). Qualcuno dirà che bash è la shell peggiore 'moderno', che può essere vero, ma non permette di fuggire in ogni modo.

C'è un argomento da fatto che usare la shell più 'popolari' è meglio per la manutenibilità per la stessa ragione di Windows è meglio (e non sto dicendo che sia): E 'facile trovare persone che puoi assumere che sanno come usarlo. Ci sono semplicemente più persone che hanno almeno una familiarità con le caratteristiche di passaggio bash-specifici, per esempio, che ksh o zsh. Trovare persone che effettivamente capire quello che stanno facendo è un'altra questione.

Tutte le conchiglie hanno vari trucchi, angolari casi e comportamenti strani. Per lo più si tratta di quello che siete abituati a. Ripresa in un piede è quello che definirei una grande tradizione Unix e senza guscio * nix può veramente tenere al sicuro.

Quasi ogni shell che vedrete è altamente portatile per quasi tutte le piattaforme. Anche se questo è vero non sarà necessariamente in grado di eseguire lo stesso (diciamo) script bash su tre diverse scatole a meno che non si erano attenti a quello che hai usato utilità e che le opzioni che li ha trasmessi. Scrivere script di shell portatili è difficile per motivi che non hanno nulla a che vedere con quale shell sono scritte per.

Quasi ogni Linux utilizza bash di default e ha maggior parte delle shell disponibili. FreeBSD include sh, csh e tcsh di default con bash ed altri nei porti. C'era molto tempo fa, Mac OS X utilizzato tcsh per impostazione predefinita, ma ora usa bash di default, e comprende zsh insieme con la maggior parte delle conchiglie comuni. Al di là che non posso commentare.

Personalmente io uso fuori bash di (soprattutto) l'inerzia. Se non fossi così familiarità con essa già Vorrei usare zsh invece.

bash è lo standard ed è molto bravo a uso interattivo (buon completamento sostenere molti programmi, la storia, il supporto readline, molti tipi di espansione di stringa). Si è anche adatto a scripting, per un guscio (array e hash, citando, manipolazione di stringhe); anche se la scrittura di script affidabili richiede di imparare molto di più.

Se si desidera che i programmi per essere in grado di crescere, lavorare con strutture di dati elaborati, e utilizzare alcune librerie utili, si dovrebbe imparare un linguaggio come Python, Ruby o Perl. La maggior parte di questi hanno interpreti interattivi così, non così conveniente come un guscio ma utile per il test rapido. IPython, per Python, è particolarmente utile; esso consente di esplorare la documentazione molto facilmente, in grado di caricare e fonte di ricarica, include un debugger. Esso comprende anche alcuni comandi standard shell e può passare il riposo ad una shell standard anteponendo un !.

  1. Grazie ad essere la maggior parte delle shell interattive sono abbastanza facili da imparare una volta che iniziare a utilizzarle esclusivamente
  2. Credo bash, e il sottoinsieme POSIX, è meglio conosciuto con un ampio margine. Ma le lingue che ho citato sono così conosciuti come molte conchiglie.
  3. Si può facilmente spararsi in un piede, convenienza spesso rende le cose indesiderabili facile.
  4. e 5. portabilità del serbatoio stesso non dovrebbe essere un problema; potrebbe essere necessario ricompilare per ottenere le caratteristiche più moderne su alcuni dei sistemi operativi di cui parli. Usando un linguaggio in piena regola con le proprie librerie aiuterà smoothe la variazione della molteplicità di piattaforme.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top