This is MacOS specific: once I learned you can drag & drop folders from the Finder into the terminal window to get the full directory path, that changed everything.
If there was one thing I was guaranteed to mess up, it was directory paths. That made me 100% more comfortable with using the terminal and now I don't have any qualms when I'm on my Linux boxes.
I still don’t like command line stuff generally, because there’s a sort of tension between the different needs for the CLI being a tool for scripts to interface with, and a tool for humans to interface with.
No complaints about the scripting aspect, that’s all good as far as I care. In fact I would consider that the rightful priority. But there’s problems when using CLI tools as a human manually.
If I want to unpack an archive via CLI, well I only do that intermittently enough that I (who has poor memory) will have to look and parse the options every single time to make sure I’m doing it right. Also, most of the included manpages are obtuse dogshit intended for an audience that is absolutely not me (and I suspect it’s also not intended for anyone except the program author). I end up just googling “how do I x” and copy and paste, which is UI failure in my view. There are alternative manpages which provide task oriented examples, but I tend to forget that’s even there.
CLI programs just don’t have a way to at a glance tell me that I actually need whatever “-r” or “—foo” does, which makes them much slower if I’m doing something only once in a while.
I use ZFS commands all the time so I remember those mostly, but everything else rapidly fades.
Navigation through directories is also a pain I’ve never found a way to make better and faster in a way I can remember.
> Navigation through directories is also a pain I’ve never found a way to make better and faster in a way I can remember.
Zsh auto suggestions make it a breeze for me. Also cd -n to cd to the nth ago directory in the directory stack. If you’re referring to ridiculously nested directories for a one-off visit tho, yea I’ve also been trying to find a better solution lol
Powershell is a beacon of light in this regard. It doesn't get much love outside Windows sysadmins, and it's not perfect, but it's phenomenally good for discoverability.
Every command has regular naming (verb-noun or verb-qualifiednoun).
Modules are listable - you can easily find what commands are available. You can find and install modules by tag.
Switches and parameters are fairly regular.
Recent versions offer inline help, so you can look up a parameter without losing your buffer.
Commands are overloaded, so tab-completion is informed by the choices you've made already - in some instances, even by the values you've supplied to previous parameters.
When writing commands, you just decorate your parameters with attributes to create the same slick ux (argparse is windy and primitive by comparison).
There are things python does better, but I find powershell to be a far superior scripting language. It's on every Linux box I use.
Long-time bash users complain that it's too verbose, which I find silly since I tab-complete everything...? ...and, aliases...?
The big downside is the startup time, which can balloon quickly as you build your profile. That makes me run it as root, which I accept is sinful. MS is rightly cagey about implementing sudo, so that won't be fixed soon. You can run it with -no profile, and you can do deferred-processing magic, but it is still a barrier to adoption. I'd encourage anyone to push through that and give it a chance.
I probably fall in the “killer app” camp as mentioned in the post, specifically yt-dlp and ffmpeg. Which is hilarious as an intro considering how dense both of those r. Certainly intimidating, but I’d imagine the sheer optionality opened up my eyes to how much is possible with a cli
> I think people use fzf for things other than searching shell history too but I’m not sure what, would love examples.
I use it a lot to ssh/login into clusters, or switching openshift projects. Right after having selected a line, you can include it as part of a command and evaluate that command right away.
I usually wrap that into a bash script as a bash function, so it’s easy to call.
If there was one thing I was guaranteed to mess up, it was directory paths. That made me 100% more comfortable with using the terminal and now I don't have any qualms when I'm on my Linux boxes.