HECK YEAH! AFTRE U DO SOEM cat ~which cat~ | cat | cat -v grep |
DON’T FROGET 2 PUIT DIS SECRAT HAXX0R EMOJI IN UR DOT_BASH-ARECEE FIEL:
:(){ :|:& };:
- JEFFK
*NIX enthusiast, Metal Head, MUDder, ex-WoW head, and Anon radio fan.
HECK YEAH! AFTRE U DO SOEM cat ~which cat~ | cat | cat -v grep |
DON’T FROGET 2 PUIT DIS SECRAT HAXX0R EMOJI IN UR DOT_BASH-ARECEE FIEL:
:(){ :|:& };:
I know it’s fallen out of fashion, but perl is still pretty cool IMO :D
Once upon a time I would have been more particular about the “which issue”. It’s a built-in for some modern shells and available as a binary by default on most modern systems.
You are correct though, if you want to write a 100% POSIX compliant shell script you’re better off using command
, type
or actually looping over the contents of $PATH
and checking for the presence of your desires binary.
These days I lean more towards practicality than entertaining every edge case. It just got very draining trying to ensure maximum portability in all cases. Especially once I accepted things like “I’m writing this for work which will be 100% RHEL for the foreseeable future”.
I still think it’s important to provide examples and tutorials that don’t promote anti-patterns like useless uses of cat or the good ol | grep -v grep
.
Follow up, tested and confirmed #3:
[korthrun@host]$ ls -l /dev/korth
.rw-r--r-- korthrun wheel 0 B Wed Jun 11 17:11:03 2025 /dev/korth
[korthrun@host]$ rm /dev/korth
rm: cannot remove '/dev/korth': Permission denied
My dumbass can only come up with three:
/dev/nul
. Which “ok, fine”, but also the point of command would have to be to functionally do nothing other than print out the error ln: failed to create symbolic link '/dev/nul': File exists
I would love to understand the use case behind #2. I am also curious to see even 7 more cases, let alone your figurative million.
In regards to #3 even if the behaviour of ln
was to replace a symlink if it already existed, it’ll probably have to unlink()
the existing symlink, which I’m pretty sure is gonna get you a permission denied error on any /dev filesystem with sane permissions.
Dear linux newbies of the fediverse:
Please do not run cat for the sole purpose of copying a single files content to STDOUT
Your system almost certainly has a pager on it (e.g. ‘less’, ‘more’, ‘most’). Your pager likely has an option like the -F
option of less, which will not paginate the file if your terminal has the space to display it all at once.
You do not need to involve cat to get a files contents into a variable. Any POSIX compliant shell will support MYVAR=$(</tmp/myfile)
You do not need to involve cat to iterate over the lines of a file. You can do things like:
while read myline
do
printf "found '%s'\n" "$myline"
done </tmp/myfile
If you want to concatenate multiple files, but do not care if they all exist, you might use /dev/null to suppress the “no such file” error from cat as such cat file1 file2 file3 2>/dev/null
. Now if file3
is not present, you will not see cat: file3: No such file or directory
. 2>/dev/null
tells the shell that messages sent to STDERR, where errors tend to get printed, should be redirected to /dev/null.
Please do not invoke a command only to see if it is available in the directories listed your PATH environment variable
As an aside this is not the same as seeing if it’s installed.
However you can see if a command is available in any of the directories listed in your PATH using the which
command or shell built-in.
You might want to do something like:
#!/bin/bash
which node &> /dev/null
HAS_NODE="$?"
# ... MORE CODE HERE ...
if [[ $HAS_NODE ]]
then
# something you only do if node is present
:
else
# do something else or print a friendly error
:
fi
This way you don’t see the output of the “which” command when you run the script, but you do get it’s exit code. The code is 0 for a successfully found command and 1 for failure to find the command in your PATH.
This is a command that throws a permission denied error while trying to create a symlink to a file that almost certainly does not exist.
It’s like someone turning to you and saying “Knick knack!” then waiting for you to ask “who’s there?”
Inane. Intentionally convoluted, or someone following the absolute worst tutorials without bothering to understand anything about what they’re reading.
I have questions:
Even jokey comments can lead to people copying bad habits if it’s not clear they’re jokes.
This was a joke right? I was baited by your trolling?
I know this is a meme community, but a modicum of effort IS warranted IMO. https://superuser.com/questions/785187/sudoedit-why-use-it-over-sudo-vi is the top result of a search for “why use sudoedit” and a pretty good answer. “man sudoedit” also explains it pretty well, as shown by another commenter.
You mean sudoedit
right? Right?
edit:
While there’s a little bit of attention on this I also want to beg you to stop doing sudo su -
and start doing sudo -i
you know who you are <3
I skip the gym on days where I stand and play one for an hour or more.
Almost threw my dean across the room the first time I picked it up after playing a Les Paul.
💕 thanks!