You also need to
ln -s /dev/null /dev/nul
ln -s /dev/null /dev/nul ln -s /dev/nul /dev/shhhhh ln -s /dev/shhhh /dev/shhhhh ln -s /dev/shhh /dev/shhhh ln -s /dev/shh /dev/shhh
Can anyone explain?
In bash, when you redirect the output of a command to
/dev/null
, likecat /etc/passwd >/dev/null
, you are silencing the output.There are cases that this is useful, for example when checking if an application is installed:
node -v >/dev/null && echo "Node.js is installed"
This line tries to get the version of Node.js, but it silences the output. That’s because we don’t care about the version. We only care about whether the execution was successful, which implies the existence of Node.js in the system.
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 iffile3
is not present, you will not seecat: 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.
Now I’ll do it even harder!