this post was submitted on 05 Mar 2025
54 points (92.2% liked)

Linux

50872 readers
1729 users here now

From Wikipedia, the free encyclopedia

Linux is a family of open source Unix-like operating systems based on the Linux kernel, an operating system kernel first released on September 17, 1991 by Linus Torvalds. Linux is typically packaged in a Linux distribution (or distro for short).

Distributions include the Linux kernel and supporting system software and libraries, many of which are provided by the GNU Project. Many Linux distributions use the word "Linux" in their name, but the Free Software Foundation uses the name GNU/Linux to emphasize the importance of GNU software, causing some controversy.

Rules

Related Communities

Community icon by Alpár-Etele Méder, licensed under CC BY 3.0

founded 5 years ago
MODERATORS
 

I've done something similiar to this over the years for organization purposes and not having to change much between shells except add a path. You can also add cases that check your shell and do something slightly different if needed.

top 33 comments
sorted by: hot top controversial new old
[–] [email protected] 1 points 7 hours ago* (last edited 7 hours ago)

Aliasing anything seems like an unnecessary abstraction in just about every instance.

Glad I don't come across it or much other unnecessary stuff in my work.

[–] [email protected] 20 points 1 day ago (2 children)

I have never heard of anyone using aliases for anything but trivial one-liners. I don't think people consider them as an alternative to scripts so I don't really get the point of half of this post.

However, the part explaining the benefits of using scripts over aliases even for trivial one-liners is pretty neat.

[–] [email protected] 1 points 6 hours ago

I honestly thought he was kidding when I came across the g=git example.

[–] [email protected] 5 points 23 hours ago (2 children)

I use aliases for renaming commands and making bash scripts look like real commands to the rest of my team.

[–] [email protected] 0 points 7 hours ago (1 children)

That's an anti-pattern if I've ever heard of one.

[–] [email protected] 1 points 7 hours ago (1 children)
[–] [email protected] 1 points 7 hours ago (1 children)

Using aliases to rename commands.

[–] [email protected] 2 points 6 hours ago

Yeah, I can see how that could go wrong, in practice it's used to alias a python version python2 to python and impacts about 10 build scripts. (Which should be rewritten, but no-one is going to prioritise that work)

[–] thedeadwalking4242 3 points 22 hours ago (1 children)

Why not make them executable and stick them in bin

[–] [email protected] 5 points 22 hours ago (1 children)

Mostly because there's a profile everyone sources that's relatively straightforward to that's straightforward to get access to. Whereas I'd never get root level access.

[–] [email protected] 2 points 12 hours ago* (last edited 12 hours ago) (1 children)

You don't need root level access though. What I usually do is stick a PATH="$PATH:$HOME/.local/bin and then place all the scripts in there.

[–] [email protected] 4 points 10 hours ago (1 children)

Wouldn't that require me to have access to everyone's home directory and need to dump the scripts in everyone's?

Potentially I could set up an alt bin directory everyone has access to and configure that in the shared profile, the only drawback there is it might be less obvious whats going on if something breaks and someone else needs to take a look at it.

[–] [email protected] 1 points 10 hours ago* (last edited 9 hours ago)

It was just an example of what I'm doing for my particular situation where I don't have root access and I want some personal scripts for myself, I'm not saying you should choose the same location. If everyone is already sourcing the same file, I expect there's already a shared storage you are maintaining that everyone has access to.

About something breaking, I guess it's up to you and your team if you prefer functions, but it also means not everyone will need to be annoyed when someone else's code has a small syntax error. And also I expect the only errors you are able to get feedback about right now would be only structural syntax errors for the function declaration (I expect you don't have unit tests or anything like that for your bash functions..) so technically a function could still be broken and you wouldn't know until you use it.

Scripts also give the advantage of being able to use other languages beyond bash, if perl/python or others are available.

Anyway, you are free to have your reasons, I was just saying that root access is not necessarily needed.

[–] CsXGF8uzUAOh6fqV 29 points 1 day ago (4 children)

I like fish abbreviations. They are like aliases but expand when you press space or enter. That way you can edit it, and also still see the full command so you are less likely to forget it when you don't have your aliases. Of course I have some scripts as well.

[–] markstos 3 points 23 hours ago

And: Fish implements aliases as scripts! When you use alias —save, fish creates as script with a function in it.

[–] [email protected] 3 points 1 day ago

I actually use both in fish. I use aliases for some longer commands. For example I have la as an alias for eza -la --icons=auto --group-directories-first because I don't really want to see it every time I run la. I use abbreviations for some shorter commands. For example systemctl abbreviated to sys and systemctl --user abbreviated to sysu.

[–] [email protected] 3 points 1 day ago (4 children)

I use ZSH with plugins but back when I switched away from bash, I also looked at fish. I didn't use it back then because people say it doesn't follow the POSIX standard but is that really an issue? It probably only extends it instead of taking things away, right?

[–] [email protected] 7 points 1 day ago

All POSIX compatible shells have their quirks and differences because the common POSIX part is rather small, so you will need to learn them anyway when switching from one to another. Fish is not that different from them (to much less extent than something like nushell) and it benefits from having less ancient baggage.

[–] CsXGF8uzUAOh6fqV 9 points 1 day ago (1 children)

Unless you have a particular reason for sticking to POSIX, who cares? I'll take the user experience improvement without worry.

[–] [email protected] 3 points 11 hours ago* (last edited 11 hours ago)

The thing is that, if you are not sticking to POSIX, you might as well use more widely available alternative scripting languages like perl or python, which are often included in most workspaces by default, so I'd say it's more useful to get experienced in those than to get experienced in fish.

[–] [email protected] 7 points 1 day ago (1 children)

I still write most scripts for bash, but for interactive use fish is just so much better out of the box.

[–] nycki 3 points 1 day ago (1 children)

this is my sticking point with fish. I still need to know bash for writing portable scripts, so its hard to justify scripting in fish.

[–] [email protected] 0 points 10 hours ago

that's actually a really good argument for not using either.

Taking a step back discussing shells seems like a never ending hell loop.

Sometimes the only way to win is not to play the game.

Use python and stop being stuck in the distant past.

[–] [email protected] 1 points 23 hours ago* (last edited 23 hours ago)

No issues except that if you want to source files to set env vars you might have to use a plugin (foreignenv in my case)

I still write scripts in bash. But fish's command completion is incredible. Idk, maybe other shells can be that good as well, but fish does out of the box.

Edit: Also some people used to bash wondered what that nice shell is on a server we administrate together. They had no problems using it coming from bash.

And sticking with POSIX is good if you want to stay portable, but my shell mustn't be portable. It should be friendly and reduce mental load.

[–] [email protected] 1 points 1 day ago

Thanks for this info! Didn't know about it! 😃

I use zsh with aliases, and Atuin which I find very convenient.

I'll definitely try out fish abbr in combo with aliases. Logic in aliases is great.

[–] [email protected] 9 points 1 day ago (2 children)

Functions are best for this.

[–] [email protected] 1 points 12 hours ago* (last edited 11 hours ago)

It still limits where / how you use them.

For example, it's easier / more efficient to call a shell script from sway (or whichever other software that might be running without a bash login session behind) than to try and force it to load a whole shell login session that includes those functions (which might also slow down the startup of the program and make it need a bit more ram without much of a benefit).

Scripts can reliably be run from everywhere (specially if placed somewhere in $PATH), functions require some preloading for every single new shell process and making sure the program invoking the shell (be it a terminal emulator or something else) is actually loading it. So as someone who likes to automate everything and often assigns hotkeys to particular commandline oneliners, scripts are much better.. even a symlink might be more reliable than an alias.

[–] [email protected] 4 points 22 hours ago (1 children)

I agree. My .zshrc is littered with functions. Most useful ones are my pack and extract I made ~10 years ago, they just recognize file extension and use the correct tool.

[–] [email protected] 3 points 22 hours ago

I even wrote a function to parse a json for some configuration details, and loop through it to dynamically create more named functions from that json profile. I use it at work for automating my cloud account logins with a single profile name from the command line. :)

[–] [email protected] 7 points 1 day ago (1 children)

Just recently I learned that one can also define functions in .bash_aliases. Very handy.

[–] whaleross 1 points 13 hours ago

Yep. And if you edit it you can reload it with ". ~/.bash_aliases" and if you do it frequently you can create an alias for it.

[–] INeedMana 2 points 1 day ago

I also switched to scripts. Aliases tend to break in loops with modified IFS

[–] [email protected] 1 points 1 day ago