#zsh

Comunitatea Linux Româniaclr@comunitatealinux.ro
2025-06-27

În ceea ce privește scripturile de tip shell pe sistemele de operare tip Unix, două shell-uri domină: Bash (Bourne Again Shell) și Zsh (Z Shell). Dacă sunteți programator sau administrator de sistem, alegerea dintre aceste două are un impact semnificativ asuprea eficienței și productivității dumneavoastră.

Înțelegerea diferențelor și asemănările dintre aceste două shell-uri vă ajută să vă optimizați fluxul de lucru în linia de comandă. Cunoașterea aspectelor fiecărui shell vă va ajuta să luați decizii în cunoștință de cauză.

Ce sunt Bash și Zsh?

Bash este popular atât pe sistemele Linux, cât și pe macOS. Este un instrument puternic pe care îl puteți utiliza pentru a interacționa cu sistemul de operare și pentru a rula comenzi. De asemenea, puteți utiliza Bash pentru scripting shell, care automatizează sarcinile prin scrierea de scripturi care conțin mai multe comenzi.

Zsh (Z Shell) este o versiune extinsă a lui Bash care are mult mai multe caracteristici. Este shell-ul implicit pe macOS. De asemenea, devine din ce în ce mai popular pe sistemele Linux.

Cum să treceți de la Bash la Zsh

Dacă folosiți un sistem Linux și doriți să treceți la Zsh, începeți prin a utiliza managerul de pachete pentru a-l instala. De exemplu, pe Debian sau Ubuntu, utilizați următoarea comandă:

sudo apt install zsh

După ce l-ați instalat pe sistemul dumneavoastră, treceți la el executând următoarea comandă:

chsh -s $(which zsh)

Dacă utilizați macOS, Zsh este deja instalat. Pentru a trece la acesta, rulați următoarea comandă:

chsh -s /bin/zsh

Pentru a reveni la Bash, înlocuiți Zsh cu Bash în comenzile de mai sus.

Pentru a verifica ce shell folosiți, rulați următoarea comandă:

echo $SHELL

Diferențe între Zsh și Bash

Există câteva diferențe între Zsh și Bash. Luând în calcul aceste diferențe vă va ajuta să decideți care shell vi se potrivește cel mai bine.

1. Personalizarea promptului

Zsh oferă o modalitate mai ușoară de personalizare a promptului utilizând instrucțiuni de tip „escape” bazate pe %. Acest lucru permite crearea de prompt-uri dinamice cu culori și informații. Pentru a vă personaliza promptul de shell, definiți PS1 (Primary Prompt).

PS1="%F{green}%n@%m %F{blue}%~ %f$ "

Instrucțiunea personalizată de mia sus afișează numele de utilizator, numele de gazdă și directorul curent în culori diferite.

Există multe alte modalități de a personaliza promptul Zsh, permițându-vă să setați un indicator de administrare, să includeți data și ora și să salvați noul prompt.

Bash folosește o abordare ușor diferită atunci când vine vorba de personalizarea promptului. Acesta folosește coduri de timp „escape” pentru a specifica modificările de culoare și formatare în prompt. Pentru a obține aceeași personalizare ca Zsh de mai sus, puteți utiliza următorul prompt personalizat.

PS1="\[\033[32m\]\u@\h \[\033[34m\]\w \[\033[0m\]\$ "

Utilizarea lui \[\033[0m\] este crucială deoarece asigură faptul că schimbările de culoare nu afectează textul care urmează după prompt.

2. Suport pentru array-uri asociative

Zsh suportă în mod nativ array-uri asociative. Aceste array-uri oferă o modalitate convenabilă de asociere a datelor, ceea ce facilitează organizarea și recuperarea informațiilor. Utilizați comanda declare -A pentru a declara în mod explicit un array asociative:

# Declară un array asociativ în Zsh declare -A my_assoc_array

Puteți apoi să atribuiți valori la tabloul asociativ:

my_assoc_array=(key1 value1 key2 value2)

Și, în cele din urmă, accesați valorile folosind cheile acestora:

echo $my_assoc_array[key1] # Outputs: value1

Bash a inclus suport nativ pentru array-uri asociative încă din versiunea 4.0. puteți declara și atribui valori in același mod ca în Zsh. Dar când vine vorba de accesarea valorilor din array, trebuie să includeți cheia între acolade:

echo "${my_assoc_array[key1]}" 

Principala diferență constă în faptul că suportul Zsh pentru array-uri asociative este mai bogat în funcții și mai avansat decât Bash. Zsh permite ca array-urile asociative să aibă chei de diferite tipuri de date, nu doar șiruri de caractere. Bash acceptă doar chei de tip șir de caractere.

În versiunile anterioare ale Bash, trebuia să găsiți o modalitate de a rezolva problema sau să dispuneți de instrumente externe pentru a utiliza array-uri asociative.

3. Modele extinse de timp Globbing

Modelele extinse de tip globbing oferă o modalitate puternică de flexibilitate de a selecta și manipula fișiere și directoare pe baza unor criterii diferite. Acestea sunt utile atunci când lucrați cu structuri complexe de fișiere sau când aveți nevoie de un control precis asupra selecțiilor de fișiere.

Într-un script Zsh, puteți activa aceste modele folosind comanda setopt. De exemplu, pentru a se potrivi cu toate fișierele .txt din directorul curent:

setopt extended_globtxt_files=(*.txt)

Pentru a se potrivi cu toate fișierele, cu excepția celor cu extensia .log:

setopt extended_globnon_log_files=^(*.log)

În Bash, trebuie să le activați folosind comanda shopt cu opțiunea extglob. De exemplu, pentru a potrivi toate fișierele .txt din directorul curent:

shopt -s extglobtxt_files=(*.txt)

Pentru a se potrivi cu toate fișierele, cu excepția celor cu extensia .log:

shopt -s extglobnon_log_files=!(*.log)

Principala diferență între Zsh și Bash în ceea ce privește modelele de tip globbing este comanda utilizată pentru a le activa. Totuși, observați că unii indicatori sunt diferiți între cele doua shell-uri.

4. Extinderea avansată a parametrilor

Zsh acceptă extinderea indirectă a parametrilor. Acest lucru vă permite să extindeți valoarea unei variabile al cărei nume este stocat într-o altă variabilă. Pentru a realiza acest lucru, trebuie să prefixați numele variabile cu un semn de exclamare !.

name="foo"result="${!name}"echo "$result"

Pe de altă parte, Bash nu permite expansiunea indirectă în mod nativ. Soluția este utilizarea comenzii eval sau a sintaxei ${!var} pentru referințe indirecte la variabile.

name="world"var="name"echo ${!var} # This will output: world

Asemănări între Bash și Zsh

Deși există diferențe între Bash și Zsh, acestea au și unele asemănări.

1. Sintaxa liniei de comandă

Bash și Zsh au în comun o sintaxă similară a liniei de comandă. Acest lucru este excelent, deoarece înseamnă că majoritatea comenzilor și scripturilor pe care le scrieți vor funcționa în oricare dintre cele doua shell-uri, fără modificări.

Zsh este construit pe baza lui Bash, deci include aceleași comenzi și caracteristici de bază. Cu toate acestea, există diferențe foarte mici de sintaxă pe care va trebui să le identificați și să le adaptați.

2. Consecvența substituției comenzilor

Substituirea comenzilor este procesul de încorporare a ieșirii unei comenzi în alta. Acest lucru este consecvent între ambele shell-uri.

result=$(ls)

Atât în Bash, cât și în Zsh, puteți utiliza sintaxa $(comandă) pentru a înlocui rezultatul unei comenzi într-o variabilă. Acest lucru permite o portabilitate ușoară a scripturilor între cele două shell-uri.

3. Opțiunea de depanare a scripturilor

Atât Bash, cât și Zsh utilizează indicatorul -x pentru depanarea scripturilor. Atunci când rulați un script cu acest indicator, acesta afișează fiecare comandă înainte de a fi executată. Acest lucru vă ajută să identificați problemele din scripturile dumneavoastră.

# Depanarea unui script atât în Bash cât și în Zsh#!/bin/bash -xecho "Depanarea scriptului Bash"

În acest script Bash, indicatorul -x activează depanarea. Puteți utiliza o abordare similară în Zsh; înlocuiți doar bash cu zsh.

Aspecte de luat în considerare pentru a alege între Zsh și Bash

    • Compatibilitate și portabilitate: Bash este shell-ul implicit pe mai multe sisteme bazate pe Unix. Acest lucru îl face să fie o alegere mai sigură pentru crearea de scripturi între platforme. Dacă aveți nevoie ca scripturile dvs. să ruleze pe o gamă largă de sisteme fără modificări, Bash este o opțiune mai bună.
    • Complexitatea scripturilor și caracteristicilor avansate: Zsh oferă caracteristici avansate, cum ar fi array-uri asociate, modele extinse de globbing și expansiune avansată a parametrilor. Acest lucru simplifică sarcinile complexe de scripting. Dacă scripturile dvs. necesită o manipulare avansată a șirurilor de caractere sau structuri de date, Zsh este o alegere mai bună.
    • Comunitatea și ecosistemul de plugin-uri: Atât Bash, cât și Zsh au comunități active, dar Zsh are o comunitate mai puternică și un ecosistem extins de plugin-uri și teme. Dacă țineți la personalizare, comunitatea vibrantă și suportul pentru plugin-uri de la Zsh pot reprezenta un avantaj semnificativ.
    • Ușurința de învățare: Dacă sunteți nou în domeniul scripturilor shell, Bash este un punct de plecare mai accesibil. Dispune de o documentație extinsă și de resurse disponibile pentru începători. Acest lucru facilitează învățarea noțiunilor de bază ale scripturilor shell.

Automatizarea sarcinilor cu ajutorul scripturilor Shell

Cunoașterea modului de automatizare a sarcinilor cu ajutorul scripturilor shell este de mare importanța. Puteți automatiza sarcinile repetitive și puteți economisi mult timp.

De asemenea, puteți utiliza aceste scripturi pentru a gestiona conturile de utilizator, pentru a monitoriza resursele sistemului, pentru a face copii de siguranța ale datelor și pentru a efectua lucrări de întreținere de rutină.

Atunci când sunt scrise cu atenție, aceste pot reduce, de asemenea, potențialul de greșeală umană.

Oh, and one thing I just learned about #Zsh: you can repeat a command from history (if you know it's command number. #Bash does this also. I have used it for years, but here's the Zsh-specific part) **with** changes. E.g.,

```zsh
!5402:s/foo/bar
```

I've mentioned before that I'm trying out #Zsh. My #dotfiles were the initial problem. I've solved that (nicely, I feel: github.com/wolf/dotfiles). And I found a great resource for learning more about Zsh: github.com/rothgar/mastering-z.

2025-06-26

Disabling zsh history for a given shell session

How to temporarily disable zsh saving history of interactive shell commands.

fed.brid.gy/r/https://www.jvt.

Paul Wilde :dontpanic2: :smeghead: :archlinux: :freebsd:paul@notnull.space
2025-06-26

@BastilleBSD
I'd say #neovim, #tmux, #zsh, #curl or even #git but they feel too easy. Of course...isn't #bastille third party too? 😁 that's in the running for me.

But, if I had to pick one I install on every box, regardless of what the box will be doing, it would probably be #sanoid / #syncoid

Deivis Díaz ✏️📱📖https://mastdeyvisdiaz
2025-06-25

Les invito a leer mi nueva entrada en terminalonly.bearblog.dev/zsh/ 💻 📚 💾 :calculator:

2025-06-24

You have NO IDEA of the boon that is having SYNTAX COLORING IN YOUR #SHELL ; I'm serious. Try it. One hour. I dare you to *ever* look back.

yphil.gitlab.io/2022/10/18/Syn #zsh #linux

2025-06-23

Switched from #zsh to #fish . Looks like its completion is faster than zsh.

Using Ctrl-R (or ESC / in vim keybinding) can search for command history which zsh currently don't have by default.

Screenshot of fastfetch of debian in kitty terminal

Claude Codeの特定コマンド実行をエイリアスで回避してみる
dev.classmethod.jp/articles/de

#dev_classmethod #Claude_Code #zsh

Dendrobatus AzureusDendrobatus_Azureus@bsd.cafe
2025-06-22

As you can see in the screen cap the project has grown beyond just a one-man show

It is vital to understand that the project would not have been scaled in this manner & at this logarithmic rate, had it not been for important partners, who due to the power of the FediVerse, were quickly introduced to the project

Did not only gave words of interest they actually contributed with giving server space to boxyBSD.

Reed the Alt text voor more information

#BoxyBSD #programming #Coding #Debian #GNU #Linux #FediVerse #freeBSD #HowTos #KVM #Module #Development #OpenSource #OS #ProxLB #LoadBalancer #Proxmox #Ansible #Virtualization #Xen #Bash #csh #zsh #ksh #tksh

The image shows a mobile device screen displaying a profile page for a developer named "gyptazy." The profile features a cartoon character with a red head and brown body, labeled "Developer." The top of the screen shows the time as 16:12, with various status icons including Bluetooth, Wi-Fi, 4G signal, and a battery level of 92%.

Below the profile picture, there are navigation tabs labeled "ABOUT," "BLOG," "TALKS," "PROJECTS," and "SKILLS." The main content of the page is a text message expressing gratitude to sponsors and friends. The text highlights the importance of support from sponsors like ServerManagementPanel, MacArne, and Nerdscave-Hosting, who provided new locations, additional compute capacity, and network bandwidth. It also thanks friends Arne, Moritz, and Stefano for their continuous talks about realizations, ideas, and help. The text emphasizes that this support helped the BSD community access resources they might not have had otherwise, making the project more rewarding.

 Ovis2-8B

🌱 Energy used: 0.263 Wh
Dendrobatus AzureusDendrobatus_Azureus@bsd.cafe
2025-06-22

Please read the screen cap closely and also read the Alt text & realize how much boxyBSD has blown up

600 plus VMS!!!

#BoxyBSD #programming #Coding #Debian #GNU #Linux #FediVerse #freeBSD #HowTos #KVM #Module #Development #OpenSource #OS #ProxLB #LoadBalancer #Proxmox #Ansible #Virtualization #Xen #Bash #csh #zsh #ksh #tksh

The image shows a mobile device screen displaying a profile page for a user named "gyptazy" with the title "DevOps." The profile features a cartoon character resembling a red bird with a brown coat and a yellow beak. The top of the screen includes a status bar with the time "15:17," a star icon, a refresh icon, a notification bell, and a battery icon showing 84% charge. Below the profile picture, there are navigation tabs labeled "ABOUT," "BLOG," "TALKS," "PROJECTS," and "SKILLS."

The main content area of the screen contains a text post. The text begins with "From there, things started moving fast. Way faster than I expected. Today, BoxyBSD has provisioned over 600 VPS instances across more than 7 physical nodes in 7+ locations around the globe. It's surreal to think about how far it came." The text continues, mentioning that BoxyBSD is heavily IPv6-focused and provides additional services such as NAT64 and DN64 gateways, shared IPv6 load balancing for websites, and a beta IPv6 tunnel broker. It concludes with a reflection on the project's growth and the importance of continuing its development.

 Ovis2-8B

🌱 Energy used: 0.293 Wh
Dendrobatus AzureusDendrobatus_Azureus@bsd.cafe
2025-06-22

An insightful article was written by @gyptazy
If this is of your interest, and you take the time to read, analyze between the lines what has been said, you will learn a lot from this

If you are passionate about Proxmox like I am, you will love to read these kind of posts, because they've been systematically, logically and relatively simply formulated, so that it's digestible for the end user of proxmox all the way up to the diehard programmer who hacks in Proxmox code

#BoxyBSD #programming #Coding #Debian #GNU #Linux #FediVerse #freeBSD #HowTos #KVM #Module #Development #OpenSource #OS #ProxLB #LoadBalancer #Proxmox #Ansible #Virtualization #Xen #Bash #csh #zsh #ksh #tksh

The image shows a mobile device screen displaying a blog post titled "How My BoxyBSD Project Boosted the Proxmox Ecosystem" by gyptazy, a DevOps professional. The post is dated 2025-06-06 and covers topics such as Ansible, BoxyBSD, coding, Debian GNU/Linux, and Proxmox. The post's content is about building a free VPS hosting platform with full IPv6 support, aimed at beginners and small open-source projects. The post's author, gyptazy, is represented by a cartoon penguin avatar. The blog post is part of a website with navigation options for About, Blog, Talks, Projects, and Skills. The image also includes a logo for BoxyBSD with the text "ProxLB BoxyBSD" and a brief excerpt from the post discussing the initial goal of the BoxyBSD project.

 Ovis2-8B

🌱 Energy used: 0.233 Wh
Dan Drake 🦆ddrake@mathstodon.xyz
2025-06-22

So I recently got a Macbook for use at work, and decided to learn a bit more about zsh, the default shell.

Things escalated quickly.

Yesterday I switched all my Linux machines to zsh.

Today I submitted a patch to the zsh developers that adds some configurability to one of the default prompts. 😄

Switching to zsh from bash was painless and fun. It seems like almost everyone defaults to using oh-my-zsh, but I found that the plain vanilla default configuration in Ubuntu/Debian is already much nicer than bash.

If you're a bash user, it seems like everything Just Works. But! You can tab-complete way more stuff! It's great. I love love the command option completion and expansion: type "rsync -<TAB>" and you get a full page of rsync options and descriptions of them!

No more starting a command...thinking of what you want it to do, and forgetting the option name...erasing the command, looking at the man page, searching for the option, quitting, retyping the command...

#zsh #bash #macos #commandLineTools

2025-06-21

Lol, the tab auto-completion of "ip link" in #zsh is... incomplete :D.
(only lists "help", "set" and "show"; but not "add")

2025-06-20

.zshrc is not loaded in standard zsh shell - Stack Overflow
stackoverflow.com/questions/44

source /root/.zshrc

#oh_my_zsh #zsh

2025-06-20

recently I messed up my #zsh profile paths on #kitty and but most tasks went well on #vterm #magit
the latter is so simple , that I wonder why was I using another term for git or anything in 1st place
OS is obviously #nixos , hence the isolated envs

Diego Córdoba 🇦🇷d1cor@mstdn.io
2025-06-19

Al parecer, #zsh tiene problemas parseando algunos comandos de #nftables... en #bash van "casi" bien.

Usando las 'comillas' se soluciona el problema, y corre tanto en #bash como en #zsh

O sea, se usan las comillas y todos felices 😃

Nada, sigo trabajando en el curso de #nftables, que me distraigo xD

#nft #linux #firewall #ciberseguridad

captura de terminal
Dendrobatus AzureusDendrobatus_Azureus@bsd.cafe
2025-06-17

@fbfortune

This works in all POSIX compliant Operating Systems

#POSIX #sh #Bash #csh #zsh #ksh #tksh

2025-06-16

Client Info

Server: https://mastodon.social
Version: 2025.04
Repository: https://github.com/cyevgeniy/lmst