1

I am working on a bash shell, While writing a script I thought to change the output and error massage of a command.

For Example the command is

sudo apt install nano

I want to give output

Installing nano

When command finishes successfully then

Nano Installed

Otherwise

Error occurred

While doing so I tried this

printf "\n Installing Nano"
{
  sudo apt install nano -y
} &> /dev/null
printf "\r Nano Installed \n"

but it not show distinct values for different exit status

2 Answers 2

1

I think you're mixing up two different things, success vs. failure and stdout vs stderr. The stdout vs. stderr distinction really has to do with a command's "normal" output (stdout) vs. status messages (stderr, including error messages, success messages, status messages, etc). In your case, all of the things you're printing should go to stderr, not stdout.

Success vs failure is a different question, and it's generally detected by the exit status of the command. It's a bit strange-looking, but the standard way to check the exit status of a command is to use it as the condition of an if statement, something like this:

printf "\n Installing Nano" >&2
if sudo apt install nano -y &> /dev/null; then
    # The "then" branch runs if the condition succeeds
    printf "\r Nano Installed \n" >&2
else
    # The "else" branch runs if the condition fails
    printf "\r Error Occured  \n" >&2
fi

(Using && and || instead of if ... then ... else can cause confusion and weird problems in some situations; I do not recommend it.)

Note: the >&2 redirects output to stderr, so the above sends all messages to stderr.

Sign up to request clarification or add additional context in comments.

Comments

0

While Trying to do so i found out a way

printf "\n Installing Nano"
sudo apt install nano &> /dev/null &&
printf "\r Nano Installed\n" ||
printf "\r Error Occured\n"

I think this will work for all

1 Comment

printf "\r Error Occured\n" 1>&2 will redirect error messages to the std-err stream. Good luck.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.