Bash
![]() ![]() | |||||||||||||
![]() ![]() | |||||||||||||
Tipus | programari lliure ![]() | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Basat en | Bourne Shell, bokmål, polonès i serbi ![]() | ||||||||||||
Versió inicial | 8 juny 1989 ![]() | ||||||||||||
Versió estable | 5.2.32 (2 agost 2024) ![]() | ||||||||||||
Llicència | GNU GPL 3.0 o posterior ![]() | ||||||||||||
Disponible en | alemany, anglès, bokmål, búlgar, castellà, català, coreà, croat, danès, eslovac, eslovè, esperanto, estonià, finès, francès, gallec, gaèlic irlandès, georgià, grec, hongarès, indonesi, italià, japonès, lituà, neerlandès, polonès, portuguès, portuguès brasiler, romanès, rus, serbi, suec, turc, txec, ucraïnès, vietnamita, xinès clàssic i xinès simplificat ![]() | ||||||||||||
En català | ![]() | ||||||||||||
Epònim | Bourne Shell, Bourne Shell i born again (en) ![]() ![]() | ||||||||||||
Part de | Projecte GNU ![]() | ||||||||||||
Característiques tècniques | |||||||||||||
Sistema operatiu | GNU/Linux, BSD, macOS, Microsoft Windows, GNU/Hurd, Unix-like i multiplataforma ![]() | ||||||||||||
Plataforma | x86_64 i i686 (en) ![]() ![]() | ||||||||||||
Escrit en | C ![]() | ||||||||||||
Format de fitxer d'escriptura | Bash script (en) ![]() ![]() | ||||||||||||
Equip | |||||||||||||
Creador/s | Brian Fox ![]() | ||||||||||||
Desenvolupador(s) | Projecte GNU ![]() | ||||||||||||
Fonts de codi
| |||||||||||||
Més informació | |||||||||||||
Lloc web | gnu.org… (anglès) ![]() | ||||||||||||
Stack Exchange | Etiqueta ![]() | ||||||||||||
Free Software Directory | Bash ![]() | ||||||||||||
Id. Subreddit | bash ![]() | ||||||||||||
Guia d'usuari | Guia d'usuari ![]() | ||||||||||||
| |||||||||||||
Bash és un intèrpret d'ordres, usat sovint pel sistema GNU/Linux. És qui s'encarrega de comunicar l'usuari amb el sistema. No és l'únic intèrpret existent per a Linux, però si un dels més emprats.
Aquest programa, desenvolupat per GNU, és una adaptació lliure de l'intèrpret d'ordres propi d'Unix, de codi font tancat, anomenat Bourne shell o sh. Lluny de recrear aquest entorn, el Bash el millora en diversos aspectes, podent-lo considerar una extensió del mateix sh.
L'entorn en si no té cap utilitat, però és amb el que podrem inicialitzar els programes, que sí que en tenen.
Vist d'aquesta manera, es pot considerar que el Bash, és el programa que ens permet utilitzar el nostre sistema, res més lluny de la realitat, ja que no sols és un simple intèrpret, sinó un petit llenguatge de programació que permet crear petits guions o programes, que administrin diverses tasques utilitzant els programes que tinguem instal·lats, així per exemple, podríem crear un petit programa que netegi els fitxers temporals cada X temps.[1]
A més, el Bash té capacitats per engegar aplicacions en segon pla, afegint així els avantatges d'un sistema multitasca com és Linux.
Una altra de les característiques del Bash com a sistema de programació és el fet que tots els guions d'arrancada d'un sistema GNU/Linux siguin creats emprant-lo, el que fa que es necessiti uns coneixements més aviat extensos sobre el seu funcionament per crear una arrancada.[2]
Una capacitat que comparteix amb el sh és el fet de poder introduir entrades (i rebre sortides), a programes o guions, simplement afegint-ne els paràmetres a continuació del programa. Els programes, en finalitzar, retornen automàticament un valor (recuperable amb "$?") que indica si ha acabat correctament o no el programa.
Història
Bash es va començar a desenvolupar el 10 de gener de 1988 per Brian Fox després que Richard Stallman quedés insatisfet amb els resultats de l'anterior desenvolupador.[3] Tant Stallman com la Free Software Foundation (FSF) consideraven un intèrpret d'ordres lliure amb la capacitat d'executar scripts anteriors tan important per a un sistema operatiu completament lliure construït amb codi BSD i GNU, que van ser ells mateixos qui el van finançar.[4] El mateix Brian Fox va publicar Bash com a versió beta amb la .99 el 8 de juny de 1989, i va seguir mantenint el codi fins a mitjans de 1994, quan va ser substituït per Chet Ramey.[5]
Des d'aleshores, Bash s'ha convertit, amb diferència, en l'intèrpret de comandes més popular entre els usuaris de Linux, fins al punt on s'ha convertit en l'intèrpret interactiu predeterminat en varies distribucions Linux,[6] i al sistema operatiu macOS fins a la publicació de la versió Catalina l'octubre de 2019.[7] Actualment, Bash està disponible en altres plataformes distribuït a través de tercers: A Microsoft Windows a través de Cygwin i MinGW, a DOS pel projecte DJGPP, a Novell NetWare, a OpenVMW gràcies al projecte GNV,[8] a ArcaOS[9] i a Android mitjançant l'ús d'aplicacions.
Funcionalitats
La sintaxi de comandes de Bash es va idear com un superconjunt de la sintaxi de Bourne shell. Entre altres operacions, bash permet l'ús de claus, completat de línia de comandes [10]i, des de la versió 2.05a, tractament de senyals.[11] Bash pot executar la majoria de scripts fets per Bourne shell sense fer cap modificació, a excepció d'aquelles comandes per als que la seva interpretació alternativa ha canviat, o les que són iguals a alguna funció nova de Bash. Les comandes de Bash inclouen idees tretes d'altres intèrprets de comandes com KornShell (ksh) i C shell (csh), com l'historial de comandes,[12] les variables $RANDOM
i $PPID
, i la sintaxi de substitució de comandes POSIX $(...)
.
Expansió per claus[13]
L'expansió per claus, també anomenada alternació, és una propietat copiada de C shell que genera un conjunt de combinacions alternatives sense que aquestes existeixin com a arxiu. El resultat manté l'ordre d'esquerra a dreta inicial:
$ echo a{p,c,b,d}e ape ace abe ade $ echo {a,b,c}{d,e,f} ad ae af bd be bf cd ce cf
Aquestes expressions no haurien de ser utilitzades en scripts portables, ja que Bourne shell no produeix el mateix resultat:
$ # A traditional shell does not produce the same output $ /bin/sh -c 'echo a{p,c,d,b}e' a{p,c,d,b}e
Quan es combina una alternació amb un caràcter comodí, primer s'expandeixen les claus i després va el caràcter comodí:
ls *.{jpg,jpeg,png} # s'expandeix a *.jpg *.jpeg *.png - i a continuació, # es processa el caràcter comodí
A més de per alternacions, les claus es poden utilitzar per generar rangs seqüencials entre dos enters separats per dos punts. Les versions més modernes de bash permeten també especificar un tercer enter corresponent a l'increment:
$ echo {1..10} 1 2 3 4 5 6 7 8 9 10 $ echo {01..10} 01 02 03 04 05 06 07 08 09 10 $ echo arxiu{1..4}.txt arxiu1.txt arxiu2.txt arxiu3.txt arxiu4.txt $ echo {a..e} a b c d e $ echo {1..10..3} 1 4 7 10 $ echo {a..j..3} a d g j
Dreceres de teclat
Bash fa servir readline per proporcionar dreceres editant les vinculacions de teclat per defecte.
Gestió de processos[14]
Bash té dos modes per a l'execució de comandes, mode batch i mode concurrent.
Per executar comandes en mode batch (en seqüència) cal separar-les per ;
o estar en línies diferents.
comanda1;comanda2
En aquest exemple, comanda2 s'executarà quan acabi comanda1. Una execució en segon pla es pot iniciar afegint &
al final de la comanda a executar, i l'execució es produirà en segon pla, retornant el control a l'intèrpret de comandes perquè pugui continuar amb altres execucions.
comanda1 &
Per tant, per tenir execució concurrent, cal executar les 2 comandes de la manera següent:
comanda1 & comanda2
En aquest cas, s'executarà comanda1 en segon pla, es tornarà al primer pla i s'executarà comanda2 sense esperar.
Per aturar l'execució d'un procés, podem fer servir Ctrl
+ z
, però únicament si està en primer pla.
Una llista de tots els processos, tant en segon pla com parats, es pot aconseguir amb la comanda jobs
:
$ jobs [1]- Running comanda1 & [2]+ Stopped comanda2
On els nombres entre claudàtors representen els identificadors de procés, +
és el procés per defecte per les comandes fg
i bg
i "Running" i "Stopped" fan referència a l'estat del procés. L'última string és la comanda que ha creat el procés. L'estat d'un procés es pot canviar amb diferents comandes. Amb fg
podem portar un procés a primer pla, i amb bg
podem enviar-lo a segon pla, totes dos comandes necessiten un identificador de procés com a argument, en cas de no tenir-lo, actuen sobre el procés amb el signe +
segons la comanda jobs
. Per acabar un procés completament s'utilitza la comanda kill
amb el nombre de procés precedit pel símbol de per cent:
kill %1
Execució condicionada[15]
Bash té incorporats separadors de comandes d'execució condicionada, que executen (o no) una comanda dependent del resultat de l'execució de la comanda anterior. Per exemple:
cd "$AlgunLloc" && ./fer_algo || echo "Error" >&2
En aquest cas, ./fer_algo s'executarà només si la comanda cd s'ha completat correctament (retorna un 0), i només s'executarà echo si alguna de les altres dues comandes falla (retorna alguna cosa diferent de 0).
Per tota comanda, el resultat de la seva execució es guarda a la variable $?
.
Bash també disposa de les alternatives if ...;then ...;else ...;fi
i case $VARIABLE in $patro)...;;$altre_patro)...;; esac
per a execució condicionada.
Informar d'errors[16]
La comanda externa bashbug s'utilitza per informar d'errors. Quan la comanda és invocada, obra l'editor per defecte amb un formulari per omplir, que és enviat a qui manté Bash o a una altra adreça de correu si s'especifica.
Finalització Programable[10]
Bash permet la finalització programable per a comandes mitjançant les comandes incorporades complete
, compot
i compgen
. Aquesta opció ha estat disponible des de la versió 2.04, publicada l'any 2000. Aquestes comandes habiliten la finalització per noms d'arxius, comandes, variables i funcions.
A partir de la versió 5.1 el nom de la comanda o opció normalment es completa amb la tecla Tab ↹
després d'escriure el nom.
Línia de temps de les versions[17]
Versió | Data publicació de la versió | Notes de versió |
---|---|---|
bash-5.2 | 2022-09-26 | canvis bash-5.2 (en) |
bash-5.1 | 2020-12-06 | canvis bash-5.1 (en) |
bash-5.0 | 2019-01-07 | canvis bash-5.0 (en) |
bash-5.0-rc1 | 2018-12-20 | |
bash-5.0-beta2 | 2018-11-28 | |
bash-5.0-beta | 2018-09-17 | |
bash-5.0-alpha | 2018-05-22 | |
bash-4.4 | 2016-09-15 | canvis bash4.4 (en) |
bash-4.4-rc2 | 2016-08-22 | |
bash-4.4-rc1 | 2016-02-24 | |
bash-4.4-beta2 | 2016-07-11 | |
bash-4.4-beta | 2015-10-12 | |
bash-4.3 | 2014-02-26 | |
bash-4.2 | 2011-02-13 | |
bash-4.1 | 2009-12-31 | |
bash-4.0 | 2009-02-20 | |
bash-4.0-rc1 | 2009-01-12 | |
bash-3.2 | 2006-10-11 | |
bash-3.1 | 2005-12-08 | |
bash-3.0 | 2004-08-03 | |
bash-2.05b | 2002-07-17 | |
bash-2.05a | 2001-11-16 | |
bash-2.05 | 2001-04-09 | |
bash-2.04 | 2000-03-21 | |
bash-2.03 | 1999-02-19 | |
bash-2.02 | 1998-04-18 | |
bash-2.01 | 1997-06-05 | |
bash-2.0 | 1996-12-31 |
Vegeu també
Referències
- ↑ «The Beginner’s Guide to Shell Scripting: The Basics». How-To Geek.
- ↑ «About.com Beginners Guide To Bash - Hello World». Lifewire.
- ↑ «comentaris de Richard Stallman sobre el proper BSD Unix» (en anglès). Arxivat de l'original el 28 de desembre 2021. [Consulta: 7 novembre 2022].
- ↑ «About the GNU Project» (en anglès). Arxivat de l'original el 24 d’abril 2011. [Consulta: 7 novembre 2022].
- ↑ «Bash 0.99 fixes & improvements». [Consulta: 7 novembre 2022].[Enllaç no actiu]
- ↑ Danesh, Arman; Jang, Michael. Mastering Linux (en anglès). John Wiley & Sons, 2006-07-14. ISBN 978-0-7821-5277-7.
- ↑ Warren, Tom. «Apple replaces bash with zsh as the default shell in macOS Catalina» (en anglès americà), 04-06-2019. [Consulta: 7 novembre 2022].
- ↑ «GNU for VMS / Wiki / InstallingGNVPackages». [Consulta: 7 novembre 2022].
- ↑ «Compatibility Subsystems» (en anglès americà). [Consulta: 7 novembre 2022].
- ↑ 10,0 10,1 «Bash Reference Manual». [Consulta: 8 novembre 2022].
- ↑ «Bash changes [Bash Hackers Wiki (DEV 20200708T2203)]». [Consulta: 8 novembre 2022].
- ↑ «Bash Reference Manual». [Consulta: 8 novembre 2022].
- ↑ «Brace Expansion (Bash Reference Manual)». [Consulta: 8 novembre 2022].
- ↑ «Job Control (Bash Reference Manual)». [Consulta: 8 novembre 2022].
- ↑ «Bash Reference Manual». [Consulta: 8 novembre 2022].
- ↑ «Bash Reference Manual». [Consulta: 8 novembre 2022].
- ↑ «Index of /gnu/bash» (en anglès). [Consulta: 7 novembre 2022].
![](http://upload.wikimedia.org/wikipedia/commons/thumb/4/4a/Commons-logo.svg/30px-Commons-logo.svg.png)