bash tricks
bash tricks
bash tricks
undefined
alias fuck="sudo !!"
i’m also a fan of
ini
alias please="sudo !!"
I'm so stealing this.
lol I've had this exact line in my profile for years ❤
cd -
goes back to the last directory you have been in
pushd
and popd
are also pretty neat in that they allow you to change directories using a stack; particularly useful as part of that is that using pushd
without any arguments will pop the directory on top of the stack and move you there, while putting your previous directory on top of the stack. When you're working across directories where you need to move around within each directory, it can be really handy.
Nice!
Also cd
without any parameters takes you to your home directory.
'cd ..' goes up a level
2 dots goes up a level, 3 dots is a syntax error:
bash: cd: ...: No such file or directory
Bottom left example will leave you with a lot pictures ending on ".png.jpg".
What's a better way?
convert $i ${i%.*}.jpg
NB: I'm no guru - I just googled "remove file extension in bash".
Julia Evans’ (@b0rk@jvns.ca on mastodon) website[0] is loaded with similar info-comics and exploration of development and networking tools, among other things.
The most useful bash trick for me is to save what I learn in demonstration scripts so I can $cat it later for a syntax reminder.
ex :
file named : ./follow_jellyfin_system_log
contents :
#!/bin/bash
journalclt -fe -u jellyfin
(some time later) .. wtf args do i pass to journalctl again..
$ls ./script_parent_directory
(list of actions written in human language appear as file names)
$cat ./follow_jellyfin_system_log
me : "oh duh!"
rinse and repeat for every command or shortcut you learn, it forces you to convert the command into a short "noun_verb" format which to me is infinitely more understandable.
that's my workflow. then the meta is deciding how to store your scripts so you don't end up with a polluted home dir. godspeed fellow bashers.
For shorter, often used workflows i end up making an alias in bashrc/zshrc.
Tbh, I should consider migrating some of my one-liners to bash aliases. I just like to be cautious to not pollute my shell's auto-complete.
Remember for $() to wrap it in quotes to prevent word splitting!!!
lots more emacs shortcuts
You're referring to libreadline, which supports both vi and emacs
https://en.wikipedia.org/wiki/GNU_Readline
Ctrl + _
is a pretty overlooked command
The most useful bash command of all: sudo apt-get -y install zsh; chsh -s zsh; exec zsh
;)
I kid, I kid! I actually like bash a lot. I really prefer it for scripting. Arrays are extremely useful but not specified in posix. Bash is pretty ubiquitous though.
I'm also curious if there are any bash partisans who prefer it over zsh and for what reasons.
I actually prefer fish, but I want to learn more bash because is is ubiquitous and a lot of bash stuff also works in fish.
You may also like NuShell. It's been designed from the ground up to be an intuitive and convenient shell language.
Fish is great! I used it for a while a long time ago but I ended up stopping because a few tools expected your shell to be set to something posix compatible. I wonder if the support is better now, I should give it a shot
I'm a serious bash scripter, I mean I do it both at work and as a hobby. And zsh arrays are better. Like you can use negative indecees and stuff. I have only written shell functions in zsh (my primary shell), and not thousands of lines of scripts like I have for bash. But if zsh had as good documentation and language servers I'd probably do many scripts in zsh instead. But I can't say for certain, as I am not as sure about performance in some situations and stuff.
Why don't I use posix shell if I care about performance? Because they are only faster in very simple scripts,
another useful one is <(cmd here)
It's like $(cmd here) but instead of returning the output of the command as a string passed into the arguments, it makes a new file descriptor for the output of the command and returns the path to it, for use in commands that want a file as an argument.
So for example if you want to use diff to compare your local passwd file to a remote one..
diff -u <(ssh host1 cat /etc/passwd) /etc/passwd
Admittedly I can't think of many things I've used this for outside of diff and alternatives to diff..but I've used it there a lot, like comparing the results of running two slightly different queries.
I use this one for comm a lot. E.g.,
comm -12 <(sort some_file) <(grep foo some_other_file | sort)
Another cool bash trick: $! gets all the arguments of the previous command, but not the command itself
I am not sure what the default keybinding is for this but I always create a .inputrc
file for searching forward and backward in the history without opening the C-r menu:
undefined
"C-p": history-search-backward "C-n": history-search-forward
Oh my god, I didn't realize this was an NSFW community. This graphic changed my life