Why I don’t use ZSH ?
Read the Article to Know that because It includes all the experiences with ZSH.
The power of command-line is undefeatable and undeniable. It is an incredibly powerful tool, essential for anyone working in software development or any tech-related field. It offers you unmatched control over your software environment, gives you direct access to nearly every feature within your software environment. On Linux systems, the command line interacts with the system’s kernel, which is the core component that manages all operations, giving you precise control over every operation. The command-line is a text-based interface that lets you execute commands, often making tasks significantly faster than using any graphical user interface (GUI) software.
As a keyboard enthusiast, the terminal is my go-to tool and favorite too because I spend most of the development time on terminal, for such neovim and commands. Bash was my first shell and I’ve using it ever since to expand my command line skills. Along the way, I stumbled upon Bash Scripting which is like the command line on steroids which allows me to automate tasks, create shortcuts, and really ramp up my productivity. With BASH scripting, I can tailor my command-line experience to be faster and more efficient, making every keystroke count. BASH is great for all kinds of tasks, from simple to complex. One of its most powerful features is its piping capability, allowing you to chain multiple commands together, where each command takes the output of the previous one as its input.
When I switched to Linux and started using Ubuntu, I noticed it came with Bash as the default shell, which is pretty common across many Linux distribution like Debian, Fedora, and CentOS. It shows a sign of BASH’s solid reputation and how well it holds up for all sorts of tasks. The experience with Bash has been like diving into the ocean’s depths and discovering new things, where the more you explore, practice and use it, the more you realize how much it can do. It’s not just about running commands, it’s about streamlining the workflow and making the digital life a whole lot smoother. My command-line skills have improved as a result of my practices and researches, but it has also given me the tools to automate and optimize my digital environment, which will lead to a more productive and efficient computing experience.
There is a lot to learn in order to become a proficient terminal user. However, one way to work more efficiently is to familiarize yourself with terminal commands. The command line allows you to perform operations much more quickly than if you were to use a graphical user interface. With BASH, you can accomplish almost any task.
Now, let’s talk about ZSH (Z Shell), the focus of this article. ZSH, also known as the Z-shell, is a powerful and versatile shell alternative that has gained popularity among developers and system administrators. While it shares many similarities with the widely-used BASH shell, ZSH offers additional features that can significantly enhance productivity and user experience. One of its most notable advantages is the integration with the Oh-My-Zsh framework, which provides an extensive collection of plugins and themes, making the terminal more customizable and visually appealing. However, users can also customize ZSH without using Oh-My-Zsh, modify their shell experience directly through configuration files. ZSH’s advanced auto-completion, syntax highlighting, and auto-suggestions streamline command-line interactions, reducing errors and speeding up workflow. Furthermore, its compatibility with BASH scripts ensures a smooth transition for users familiar with BASH.
ZSH is not installed by default on most Linux systems, although it is the default shell on macOS, Kali Linux and Parrot OS. For other operating systems, users needs to install ZSH manually. While ZSH shares many features with BASH, it offers additional capabilities such as :
- Auto-Completion
- Bash Familiarity
- Syntax Highlighting
- Auto Suggest / Auto Spell
- Tab Completion
I’ve used ZSH for about a year now, experimenting with various features and customizations. My initial fascination in ZSH sprang from a coworker who raved about it benefits, which I then discovered were replicated in many online articles and YouTube videos. I got really curious about ZSH and installed it on the system to try it out and see if it could make my work easier. I initially enjoyed the flexibility and the features ZSH offered, I began to notice some drawbacks, particularly when compared to BASH.
After installing ZSH on the system, I spent considerable time in customizing it with Oh-My-Zsh and it look good, creating a terminal environment that looks good and works well for the daily tasks. ZSH’s flexibility and speed have become a valuable tool in my workflow. As I’ve continued to use ZSH, I’ve come to appreciate its features even more, recognizing additional benefits that enhance productivity. ZSH has given me a low-hanging fruit that will increase my productivity with the least amount of effort that keeps me in the fantastic box of good features. However, the real challenge lies in the portability, when you exit that box because ZSH isn’t going to be on every system and after spending all this time on ZSH, I’m going to miss its features when I have to revert to BASH on other systems.
It’s somewhat surprising that while there is a wealth of content highlighting ZSH’s advantages, there is a scarcity of discussions on its drawbacks. I believe the biggest pitfall is when individuals, inspired by a flashy demo, hastily switch to ZSH and install Oh-My-ZSH without a solid understanding of shell fundamentals. This approach can lead to a superficial engagement with a complex tool, where users are left with a new shell and a tangle of code they don’t fully comprehend. While this may not cause immediate issues, it prevents them from maximizing the potential of their shell. In many cases, a deeper dive into BASH might be more beneficial.
In light of these observations, I make a list of the disadvantages I’ve encountered while using ZSH with or without Oh-My-ZSH, providing a balanced perspective for those who considering the switch.
1. DISCLOSURE OF PERSONAL INFORMATIONS
I started using ZSH about a month before the COVID-19 restrictions kicked in, a time when remote work surged, and tools like Remote Desktop, Video Conferencing, and Screen Sharing became essential. Amidst this shift, I noticed that many software, like Zoom, which doesn’t performs smoothly even on fast internet connections, can sometimes be more of a nuisance than a help due to their intrusive features.
During the time when I was meeting with the coworkers on Zoom then one such issue arose when I was sharing the screen during a demonstration which uses the SSH to my team via a terminal. The Auto Suggest feature in ZSH, which is normally beneficial, inadvertently displayed my previous SSH command with password and ports, right in front of the coworkers. This is problematic situation because SSH access is restricted, and my colleagues aren’t supposed to see that information. It goes against basic company ethics. This definitely wasn’t the kind of transparency I was hoping for and it felt quite unprofessional. Although the Auto-Completion feature in ZSH is usually useful, it can sometimes cause awkward or sensitive situations.
2. CUSTOMIZATION OF TERMINAL CAN BE FRUSTRATING SOMETIMES
While ZSH offers numerous benefits due to its advanced features, the time spent customizing it with Oh-My-Zsh often feels like a waste of time. It consumes significantly more memory than BASH, which can be a nightmare for users with low-end PCs or laptops. Additionally, ZSH occasionally throws unexpected errors that are difficult to diagnose without turning to the internet for help.
Before customizing your terminal, diving into theme installations, it’s wise to reflect on your actual usage patterns. Consider learning how to modify your environment using BASH and take the time to understand the purpose of each line in your dotfiles. As you gain more experience, gradually enhance your dotfiles. This approach ensures a more thoughtful and efficient customization process.
3. Extra Win for Sometimes doesn’t make you an Experienced User
ZSH is generally fine, but there’s a particular challenge for new users who dive straight into ZSH without first getting comfortable with BASH. It’s important to understand the capabilities of your default shell before experimenting with alternatives. BASH users have also the option to customize their shell with tools like bash-it, which I find quite beneficial but I don’t use because I customize it manually using Bash Script. Before diving into ZSH, it’s wise to gain a solid understanding of BASH. This foundational knowledge can provide you with a wealth of valuable experience.
By investing time in understanding BASH, you’re not just learning a shell, you’re building a skill set that will serve you well, regardless of which shell you ultimately choose to use. So, before you start using ZSH, ensure you’ve truly mastered BASH — it’s an investment in your technical skills that will pay off in the long run.
4. ZSH CAN SOMETIMES ENCOURAGE IRRESPONSIBLE PRACTICES
As a programmer or in any position of responsibility within the tech industry requires a serious commitment, attentiveness and precision. Many ZSH users, I suspect, have experienced mishaps such as erroneous command executions that require redoing entire tasks. This is particularly concerning for sysadmins or pentesters, where a single misstep on the command line can have serious repercussions. Moreover, there are many instances where we might overlook what command is being suggested while typing by ZSH’s auto-suggest, in a rush but we opt for the auto-suggest feature without thoroughly checking what the command is intended to do.
It’s imperative to maintain accountability in your role and seize every opportunity to enhance your knowledge and skills. It’s crucial to remain vigilant and ensure that every action on the command line is deliberate and well-considered. Cultivating a habit of double-checking commands and understanding their full scope is essential for maintaining both efficiency and security.
The auto-suggest and auto-completion features of ZSH are designed to enhance productivity and reduce typing errors, but they can indeed lead to unintended consequences if users rely on them without verifying the commands. For users who are new to command-line interfaces or who are not diligent in their command verification, these features might indeed encourage a lack of thoroughness, which could be seen as an irresponsible practice. However, for experienced users who understand the risks and take precautions, ZSH’s features can be leveraged responsibly to improve efficiency.
5. AUTO-COMPLETION & SUGGEST CAN ENCOURAGE LAZINESS
The convenience of auto-completion and suggestion features in modern command-line interfaces, such as ZSH, can indeed impressive. These features are designed to enhance efficiency by reducing the need for manual command entry and by providing prompts that guide users through complex commands or options. While this automation can save time and reduce errors, it can also lead to a decrease in active engagement with the command line. Users may find themselves relying heavily on these suggestions, sometimes without fully understanding the commands they are executing. This over-reliance can diminish the user’s ability to recall commands from memory or to type them out accurately without assistance.
Moreover, the feature can pose security risks if it suggests commands from the command history that contain sensitive information, such as passwords or private keys. Users might inadvertently execute these commands without proper scrutiny, leading to potential security breaches. While auto-completion and suggestion features are valuable tools for enhancing productivity, it’s important for users to balance their use with a healthy dose of manual command entry and verification. This approach ensures that users remain engaged and knowledgeable about their tools, maintaining both efficiency and security.
CONCLUSION
Bash and Zsh are important tool for users, and I have no qualms with ZSH or any other shell. I appreciate the many features that ZSH offers, and both shells share some useful and common characteristics. Ultimately, it’s up to the users to decide how they want to use these tools. In the realm of software development and information security, there’s no room for personal offense, as most skilled developers and newcomers alike employ a variety of tools based on their specific needs, usability, and convenience. They don’t adopt tools simply because they are popular. The buzz around ZSH is just one example of the many debates that arise in the tech community.
It’s important to note that just because a tool is popular doesn’t necessarily mean it’s the best choice. The majority opinion isn’t always correct. That’s all I have to say on the matter, and I reiterate that I have no objections to any of these tools or debates. I’ve witnessed numerous discussions, video comparisons, and comment wars on community platforms regarding various tools and preferences, such as TMUX vs. Terminator, ZSH vs. Bash, Vim vs. Emacs, Chrome vs. Brave, and, of course, the timeless debate between tabs and spaces.
These debates often create a lot of hype around select topics, with some individuals considering them crucial while others don’t. Many users seek more features, while some prioritize aesthetics. It’s all up to the users to decide.
Keep it Cool & Peace :-)