#zsh

I am interacting with the #Shell for perhaps as much as 50 or 60% of the day. A lot of my interactions are repeating previous commands sometimes with small changes. I have lots of conveniences set up to make this easier ( #Vi mode, opening a previous command or list of commands in the #HelixEditor with `fc`, an alias for `history | grep`, etc., and also lots of configuration for the history facility ) but perhaps the thing I use most is the arrow keys. For so many other people, their favorite tool here is Ctrl-R. I’ve never made that a major part of my toolset.

In #Bash, I used this:

```bash
bind '"\t":menu-complete'
bind '"\e[A":history-search-backward'
bind '"\e[B":history-search-forward'
```

What that does is: you type something, then up-arrow steps you through all and only the previous commands that start with that exact prefix. My initial translation of this into #Zsh sorta worked but I soon realized it didn’t do the right thing. I’m not a Zsh expert yet. Here’s what actually works:

```zsh
# Load the functions I will use with the up and down arrows. Yes, this is more work than Bash.
autoload -U up-line-or-beginning-search
autoload -U down-line-or-beginning-search

# Create the matching zle widgets. That's what let's me use them with bindkey.
zle -N up-line-or-beginning-search
zle -N down-line-or-beginning-search

# Bind to arrow keys
bindkey '^[[A' up-line-or-beginning-search # Up arrow
bindkey '^[[B' down-line-or-beginning-search # Down arrow

# But lets keep tab-completion as well.
bindkey '^I' menu-complete
```

Zsh is more complicated, but only because it’s more flexible.

By the way, I use `fzf` a lot. I was very pleasantly surprised to see Zsh automatically leveraged that, if available, in Ctrl-R.

Trey Hunner 🐍treyhunner
2025-07-09

Vim users:

Do you use vi mode in your shell (bash, zsh, fish, etc.), the default bash mode, or something else?

in_sympathyin_sympathy
2025-07-08

Btw I switched to and my god life is so much better with autocomplete and syntax highlighting 😃

Thomas Svensson 🖖tsvenson@fosstodon.org
2025-07-07

Should I change #shell?

Help me with convincing reasons leaving #bash for #zsh or #fish on :archlinux: with :ghostty:

Or is it bad timing now when, after three years, v5.3 is just released: phoronix.com/news/GNU-Bash-5.3

2025-07-06

@BastilleBSD we made it! #zsh

R.L. Dane :Debian: :OpenBSD: 🍵 :MiraLovesYou:rl_dane@polymaths.social
2025-07-06

#Poll: Curious about people's attitudes towards shell scripting.

Two part question:

  1. Are you a DEVeloper (or working in a development-heavy role), OTHER-IT worker (such as a sysadmin, architect, anything in a non-development-heavy role), or NON-IT (accountant, doctor, whatever)
  2. Do you HATE shell scripting, are you INDIFferent towards (or ignorant of) shell scripting, or do you LOVE it?

#Unix #UnixShell #ShellScript #ShellScripting #POSIX #PosixShell #sh #bash #zsh #csh #tcsh #ksh #pdksh #oksh #mksh

2025-07-03

Ich habe mal eine Frage an alle Shell Hacker hier:

- Ich habe zeitliche Längen in Stunden in Dezimal, also zb. 1 oder 1.25 (also immer in Viertelstunden Abstand)
- Ich möchte diese in die Form HH:MM formatieren, also 01:00 und 01:15

Wie kann ich das machen?

#zsh #script

Kevin Karhan :verified:kkarhan@infosec.space
2025-07-02

@katyswain I din't think that #CCSS is good either, but the demands of #GPLv3 are not compatible with the (adnitteldy shitty) reality of how #IP, #Licensing and #Patents work and thus it kneecaps a lot of things.

I chose #0BSD for _OS/1337 because as with any "intellectual labour", one cannot force others to collaborate and I'd rather have people join in out of the goodness of their hearts instead of just dumping some random git commit that is useless.

#OS1337

Der CleverAdmin Blogblog@social.techniverse.net
2025-07-02

Terminal aufgemotzt: Warum ich Oh My Zsh nutze

Ich habe das Tool Oh My Zsh im Jahr 2021 kennengelernt. Ein ehemaliger Arbeitskollege hatte mir damals den Tipp gegeben. Ich war zu der Zeit noch ziemlich neu in der Linux-Welt, und ganz ehrlich: Am Anfang war alles neu für mich. Dementsprechend war ich froh, dass ich Oh My Zsh so früh entdeckt habe. Di...

cleveradmin.de/blog/2025/07/te
#Linux #linux #OhMyZsh #plugins #Terminal #zsh

2025-07-01

Plopped a meta little thing into my #zsh config tree which was recommended at the #PyConUS dotfiles BoF ✨

(the idea as described was obviously shell-agnostic, in my case today it was a nice excuse to remember exactly how compdef + its helpers work…)

# Edit-then-source for zsh rc files, because forgetting to source stinks!
function modify() {
target=~/.zsh/$1
vim $target && source $target
}
compdef "_files -W ~/.zsh/" modify

J.A. Machetejosemachete79
2025-06-30


Interesting article if you like me, are new to linux and you are in your first days after 86ing M$ for software and linux os. Using both Mint and Zorin, enjoying the hell outta the Daunting Terminal. First dips into :o
an4t.com/linux-shell-customiza

2025-06-29

Terrible Shell Scripting: Contexts

Writing in the previous post in the series about the way I like my interactive shell to be configured, I did touch on the context aspect briefly:Well, OK, maybe the other nicety is using a [...]

🔗 chbk.co/JhOMH

#bash #docker #fosstodon #kubernetes #mastodon #shell #zsh

My friend @jammcq and I are very different (you’ve heard us together on the #Podcast @RuntimeArguments), though we both do roughly the same thing: we’re both #Programmers. A big difference between us is the kinds of #SoftwareTools we use. I’m constantly trying new things to see if they might help. He generally sticks to the tools that already work for him, and upgrades only when something new is "better enough".

As an example: I use fd, rg, and exa. For him, find, grep, and ls are plenty good enough. And I agree! I get something out of the extra features of these tools, but they’re just not "better enough" to make a difference in his workflow.

Usually the new things I try aren’t even "better enough" for me. His bar is even higher. I have sold him on a few things, here and there. Now he uses #Git, #1Password, and fc; maybe others. We both want the same thing: we want to get more work done. We both project when thinking about the other’s style. He thinks I’m wasting time trying all the things I try. I think he could be going so much faster if he had some of the extra powers these newer tools give me.

It’s hard not to see things through your own lens. A neat thing about our relationship is that I can try things, and then if they pass muster with me they can sometimes become a possibility for him. And every once in a while, they **are** "better enough".

P.S. Some things I’m trying right now are #Zsh, the #HelixEditor, and managing my #SSH (private) keys in 1Password. I’m almost certain Helix is not going to become a part of his workflow! #Xonsh, #Zed, and #Kakoune weren’t better enough for me. I never even considered suggesting them to him!

2025-06-28

I am still in progress of dotfiles bankrupcy (I go bit by bit, currently challenged by addition of yet another OS to my fleet). I realized my #zsh configs barely use features that make #zsh different shell. So far I love [[ ]] and filename generation.

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:

Client Info

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