Linux e command

Linux e command DEFAULT

What does set -e mean in a bash script?

This is an old question, but none of the answers here discuss the use of aka in Debian package handling scripts. The use of this option is mandatory in these scripts, per Debian policy; the intent is apparently to avoid any possibility of an unhandled error condition.

What this means in practice is that you have to understand under what conditions the commands you run could return an error, and handle each of those errors explicitly.

Common gotchas are e.g. (returns an error when there is a difference) and (returns an error when there is no match). You can avoid the errors with explicit handling:

(Notice also how we take care to include the current script's name in the message, and writing diagnostic messages to standard error instead of standard output.)

If no explicit handling is really necessary or useful, explicitly do nothing:

(The use of the shell's no-op command is slightly obscure, but fairly commonly seen.)

Just to reiterate,

is shorthand for

i.e. we explicitly say should be run if and only if fails. The longhand (and other shell flow control statements like , ) is also a valid way to handle an error (indeed, if it weren't, shell scripts with could never contain flow control statements!)

And also, just to be explicit, in the absence of a handler like this, would cause the entire script to immediately fail with an error if found a difference, or if didn't find a match.

On the other hand, some commands don't produce an error exit status when you'd want them to. Commonly problematic commands are (exit status does not reflect whether files were actually found) and (exit status won't reveal whether the script received any input or actually performed any commands successfully). A simple guard in some scenarios is to pipe to a command which does scream if there is no output:

It should be noted that the exit status of a pipeline is the exit status of the last command in that pipeline. So the above commands actually completely mask the status of and , and only tell you whether finally succeeded.

(Bash, of course, has ; but Debian package scripts cannot use Bash features. The policy firmly dictates the use of POSIX for these scripts, though this was not always the case.)

In many situations, this is something to separately watch out for when coding defensively. Sometimes you have to e.g. go through a temporary file so you can see whether the command which produced that output finished successfully, even when idiom and convenience would otherwise direct you to use a shell pipeline.


If no options or arguments are supplied, displays the names and values of all shell variables and functions, sorted according to the current locale, in a format that may be reused as input for setting or resetting the currently-set variables. Read-only variables cannot be reset. In POSIX mode, only shell variables are listed.

When options are supplied, they set or unset shell attributes. Options, if specified, have the following meanings:

Each variable or function that is created or modified is given the export attribute and marked for export to the environment of subsequent commands.

Cause the status of terminated background jobs to be reported immediately, rather than before printing the next primary prompt.

Exit immediately if a pipeline (see Pipelines), which may consist of a single simple command (see Simple Commands), a list (see Lists), or a compound command (see Compound Commands) returns a non-zero status. The shell does not exit if the command that fails is part of the command list immediately following a or keyword, part of the test in an statement, part of any command executed in a or list except the command following the final or , any command in a pipeline but the last, or if the command’s return status is being inverted with . If a compound command other than a subshell returns a non-zero status because a command failed while was being ignored, the shell does not exit. A trap on , if set, is executed before the shell exits.

This option applies to the shell environment and each subshell environment separately (see Command Execution Environment), and may cause subshells to exit before executing all the commands in the subshell.

If a compound command or shell function executes in a context where is being ignored, none of the commands executed within the compound command or function body will be affected by the setting, even if is set and a command returns a failure status. If a compound command or shell function sets while executing in a context where is ignored, that setting will not have any effect until the compound command or the command containing the function call completes.

Disable filename expansion (globbing).

Locate and remember (hash) commands as they are looked up for execution. This option is enabled by default.

All arguments in the form of assignment statements are placed in the environment for a command, not just those that precede the command name.

Job control is enabled (see Job Control). All processes run in a separate process group. When a background job completes, the shell prints a line containing its exit status.

Read commands but do not execute them. This may be used to check a script for syntax errors. This option is ignored by interactive shells.

Set the option corresponding to :

Same as .

Same as .

Use an -style line editing interface (see Command Line Editing). This also affects the editing interface used for .

Same as .

Same as .

Same as .

Same as .

Same as .

Enable command history, as described in Bash History Facilities. This option is on by default in interactive shells.

An interactive shell will not exit upon reading EOF.

Same as .

Same as .

Same as .

Same as .

Same as .

Currently ignored.

Same as .

Same as .

Same as .

Same as .

If set, the return value of a pipeline is the value of the last (rightmost) command to exit with a non-zero status, or zero if all commands in the pipeline exit successfully. This option is disabled by default.

Change the behavior of Bash where the default operation differs from the POSIX standard to match the standard (see Bash POSIX Mode). This is intended to make Bash behave as a strict superset of that standard.

Same as .

Same as .

Use a -style line editing interface. This also affects the editing interface used for .

Same as .

Turn on privileged mode. In this mode, the and files are not processed, shell functions are not inherited from the environment, and the , , and variables, if they appear in the environment, are ignored. If the shell is started with the effective user (group) id not equal to the real user (group) id, and the option is not supplied, these actions are taken and the effective user id is set to the real user id. If the option is supplied at startup, the effective user id is not reset. Turning this option off causes the effective user and group ids to be set to the real user and group ids.

Exit after reading and executing one command.

Treat unset variables and parameters other than the special parameters ‘’ or ‘’ as an error when performing parameter expansion. An error message will be written to the standard error, and a non-interactive shell will exit.

Print shell input lines as they are read.

Print a trace of simple commands, commands, commands, commands, and arithmetic commands and their arguments or associated word lists after they are expanded and before they are executed. The value of the variable is expanded and the resultant value is printed before the command and its expanded arguments.

The shell will perform brace expansion (see Brace Expansion). This option is on by default.

Prevent output redirection using ‘’, ‘’, and ‘’ from overwriting existing files.

If set, any trap on is inherited by shell functions, command substitutions, and commands executed in a subshell environment. The trap is normally not inherited in such cases.

Enable ‘’ style history substitution (see History Interaction). This option is on by default for interactive shells.

If set, do not resolve symbolic links when performing commands such as which change the current directory. The physical directory is used instead. By default, Bash follows the logical chain of directories when performing commands which change the current directory.

For example, if is a symbolic link to then:

$ cd /usr/sys; echo $PWD /usr/sys $ cd ..; pwd /usr

If is on, then:

$ cd /usr/sys; echo $PWD /usr/local/sys $ cd ..; pwd /usr/local

If set, any trap on and are inherited by shell functions, command substitutions, and commands executed in a subshell environment. The and traps are normally not inherited in such cases.

If no arguments follow this option, then the positional parameters are unset. Otherwise, the positional parameters are set to the , even if some of them begin with a ‘’.

Signal the end of options, cause all remaining to be assigned to the positional parameters. The and options are turned off. If there are no arguments, the positional parameters remain unchanged.

Using ‘’ rather than ‘’ causes these options to be turned off. The options can also be used upon invocation of the shell. The current set of options may be found in .

The remaining N are positional parameters and are assigned, in order, to , , … . The special parameter is set to N.

The return status is always zero unless an invalid option is supplied.

  1. Osrs dragon scimitar
  2. Express setheader
  3. Lion king vhs release date
  4. Vrchat cant login

7.1. Introduction to if

7.1.2. Simple applications of if Testing exit status

The variable holds the exit status of the previously executed command (the most recently completed foreground process).

The following example shows a simple test:

The following example demonstrates that TEST-COMMANDS might be any UNIX command that returns an exit status, and that if again returns an exit status of zero:

The same result can be obtained as follows: Numeric comparisons

The examples below use numerical comparisons:

This script is executed by cron every Sunday. If the week number is even, it reminds you to put out the garbage cans: String comparisons

An example of comparing strings for testing the user ID:

With Bash, you can shorten this type of construct. The compact equivalent of the above test is as follows:

Similar to the "&&" expression which indicates what to do if the test proves true, "||" specifies what to do if the test is false.

Regular expressions may also be used in comparisons:

NoteReal Programmers

Most programmers will prefer to use the test built-in command, which is equivalent to using square brackets for comparison, like this:

NoteNo exit?

If you invoke the exit in a subshell, it will not pass variables to the parent. Use { and } instead of ( and ) if you do not want Bash to fork a subshell.

See the info pages for Bash for more information on pattern matching with the "(( EXPRESSION ))" and "[[ EXPRESSION ]]" constructs.

Linux Essentials - The sed Command

echo command in Linux with Examples

echo command in linux is used to display line of text/string that are passed as an argument . This is a built in command that is mostly used in shell scripts and batch files to output status text to the screen or a file.

Syntax :

echo [option] [string]

Displaying a text/string :

Syntax :

echo [string]

Example :

Options of echo command

NOTE :--e here enables the interpretation of backslash escapes

1. \b : it removes all the spaces in between the text

Example :

echo -e "Geeks \bfor \bGeeks"

2. \c : suppress trailing new line with backspace interpretor ‘-e‘ to continue without emitting new line.

Example :

echo -e "Geeks \cfor Geeks"

In above example, text after \c is not printed and omitted trailing new line.

3. \n : this option creates new line from where it is used.

Example :

echo -e "Geeks \nfor \nGeeks"

4. \t : this option is used to create horizontal tab spaces.

Example :

echo -e "Geeks \tfor \tGeeks"

5. \r : carriage return with backspace interpretor ‘-e‘ to have specified carriage return in output.

Example :

echo -e "Geeks \rfor Geeks"

In the above example, text before \r is not printed.

6. \v : this option is used to create vertical tab spaces.

Example :

echo -e "Geeks \vfor \vGeeks

7. \a : alert return with backspace interpretor ‘-e‘ to have sound alert.

Example :

echo -e "\aGeeks for Geeks

This command when executed, it will produce an alert sound or Bel .

8. echo * : this command will print all files/folders, similar to ls command .

Example :

echo *

9. -n : this option is used to omit echoing trailing newline .

Example :

echo -n "Geeks for Geeks"


E command linux

What does 'set -e' do, and why might it be considered dangerous?

terminates the script if a nonzero exit code is encountered, except under certain conditions. To sum up the dangers of its usage in a few words: it doesn't behave how people think it does.

In my opinion, it should be regarded as a dangerous hack which continues to exist for compatibility purposes only. The statement does not turn shell from a language that uses error codes into a language that uses exception-like control flow, it merely poorly attempts to emulate that behaviour.

Greg Wooledge has a lot to say on the dangers of :

In the second link, there are various examples of the unintuitive and unpredictable behaviour of .

Some examples of the unintuitive behaviour of (some taken from the wiki link above):

  • set -e x=0 let x++ echo "x is $x" The above will cause the shell script to prematurely exit, because returns 0, which is treated by the keyword as a falsy value and turned into a nonzero exit code. notices this, and silently terminates the script.
  • set -e [ -d /opt/foo ] && echo "Warning: foo is already installed. Will overwrite." >&2 echo "Installing foo..."

    The above works as expected, printing a warning if exists already.

    set -e check_previous_install() { [ -d /opt/foo ] && echo "Warning: foo is already installed. Will overwrite." >&2 } check_previous_install echo "Installing foo..."

    The above, despite the only difference being that a single line has been refactored into a function, will terminate if does not exist. This is because the fact that it worked originally is a special exception to 's behaviour. When returns nonzero, it is ignored by . However, now that it's a function, the exit code of the function is equal to the exit code of that command, and the function returning nonzero will silently terminate the script.

  • set -e IFS=$'\n' read -d '' -r -a config_vars < config

    The above will read the array from the file . As the author might intend, it terminates with an error if is missing. As the author might not intend, it silently terminates if does not end in a newline. If were not used here, then would contain all lines of the file whether or not it ended in a newline.

    Users of Sublime Text (and other text editors which handle newlines incorrectly), beware.

  • set -e should_audit_user() { local group groups="$(groups "$1")" for group in $groups; do if [ "$group" = audit ]; then return 0; fi done return 1 } if should_audit_user "$user"; then logger 'Blah' fi

    The author here might reasonably expect that if for some reason the user does not exist, then the command will fail and the script will terminate instead of letting the user perform some task unaudited. However, in this case the termination never takes effect. If cannot be found for some reason, instead of terminating the script, the function will just return incorrect data as if was not in effect.

    This applies to any function invoked from the condition part of an statement, no matter how deeply nested, no matter where it is defined, no matter even if you run inside it again. Using at any point completely disables the effect of until the condition block is fully executed. If the author is not aware of this pitfall, or does not know their entire call stack in all possible situations in which a function can be called, then they will write buggy code and the false sense of security provided by will be at least partially to blame.

    Even if the author is fully aware of this pitfall, the workaround is to write code in the same way as one would write it without , effectively rendering that switch less than useless; not only does the author have to write manual error handling code as if were not in effect, but the presence of may have fooled them into thinking that they do not have to.

Some further drawbacks of :

  • It encourages sloppy code. Error handlers are completely forgotten about, in the hopes that whatever failed will report the error in some sensible way. However, with examples like above, this is not the case. If the script dies unexpectedly, it is usually silently, which hinders debugging. If the script does not die and you expected it to (see previous bullet point), then you have a more subtle and insidious bug on your hands.
  • It leads people into a false sense of security. See again the -condition bullet point.
  • The places where the shell terminates are not consistent between shells or shell versions. It is possible to accidentally write a script which behaves differently on an older version of bash due to the behaviour of having been tweaked between those versions.

is a contentious issue, and some people aware of the issues surrounding it recommend against it, while some others just recommend taking care while it is active to know the pitfalls. There are many shell scripting newbies who recommend on all scripts as a catch-all for error conditions, but in real life it does not work that way.

is no substitute for education.

answered Apr 27 '17 at 23:06


26333 silver badges77 bronze badges

Linux Command Line Full course: Beginners to Experts. Bash Command Line Tutorials

The echo command is one of the most commonly and widely used built-in commands for Linux bash and C shells, that typically used in a scripting language and batch files to display a line of text/string on standard output or a file.

echo command

The syntax for the echo command is:

echo [option(s)] [string(s)]

1. Input a line of text and display it on standard output

$ echo Tecmint is a community of Linux Nerds

Outputs the following text:

Tecmint is a community of Linux Nerds

2. Declare a variable and echo its value. For example, Declare a variable of x and assign its value=10.

$ x=10

echo its value:

$ echo The value of variable x = $x The value of variable x = 10

Note: The ‘-e‘ option in Linux acts as an interpretation of escaped characters that are backslashed.

3. Using option ‘\b‘ – backspace with backslash interpretor ‘-e‘ which removes all the spaces in between.

$ echo -e "Tecmint \bis \ba \bcommunity \bof \bLinux \bNerds" TecmintisacommunityofLinuxNerds

4. Using option ‘\n‘ – New line with backspace interpretor ‘-e‘ treats new line from where it is used.

$ echo -e "Tecmint \nis \na \ncommunity \nof \nLinux \nNerds" Tecmint is a community of Linux Nerds

5. Using option ‘\t‘ – horizontal tab with backspace interpretor ‘-e‘ to have horizontal tab spaces.

$ echo -e "Tecmint \tis \ta \tcommunity \tof \tLinux \tNerds" Tecmint is a community of Linux Nerds

6. How about using option new Line ‘\n‘ and horizontal tab ‘\t‘ simultaneously.

$ echo -e "\n\tTecmint \n\tis \n\ta \n\tcommunity \n\tof \n\tLinux \n\tNerds" Tecmint is a community of Linux Nerds

7. Using option ‘\v‘ – vertical tab with backspace interpretor ‘-e‘ to have vertical tab spaces.

$ echo -e "\vTecmint \vis \va \vcommunity \vof \vLinux \vNerds" Tecmint is a community of Linux Nerds

8. How about using option new Line ‘\n‘ and vertical tab ‘\v‘ simultaneously.

$ echo -e "\n\vTecmint \n\vis \n\va \n\vcommunity \n\vof \n\vLinux \n\vNerds" Tecmint is a community of Linux Nerds

Note: We can double the vertical tab, horizontal tab, and new line spacing using the option two times or as many times as required.

9. Using option ‘\r‘ – carriage return with backspace interpretor ‘-e‘ to have specified carriage return in output.

$ echo -e "Tecmint \ris a community of Linux Nerds" is a community of Linux Nerds

10. Using option ‘\c‘ – suppress trailing new line with backspace interpretor ‘-e‘ to continue without emitting new line.

$ echo -e "Tecmint is a community \cof Linux Nerds" Tecmint is a community [email protected]:~$

11. Omit echoing trailing new line using the option ‘-n‘.

$ echo -n "Tecmint is a community of Linux Nerds" Tecmint is a community of Linux [email protected]:~/Documents$

12. Using option ‘\a‘ – alert return with backspace interpretor ‘-e‘ to have the sound alert.

$ echo -e "Tecmint is a community of \aLinux Nerds" Tecmint is a community of Linux Nerds

Note: Make sure to check the Volume key, before firing.

13. Print all the files/folders using echo command (ls command alternative).

$ echo * 103.odt 103.pdf 104.odt 104.pdf 105.odt 105.pdf 106.odt 106.pdf 107.odt 107.pdf 108a.odt 108.odt 108.pdf 109.odt 109.pdf 110b.odt 110.odt 110.pdf 111.odt 111.pdf 112.odt 112.pdf 113.odt linux-headers-3.16.0-customkernel_1_amd64.deb linux-image-3.16.0-customkernel_1_amd64.deb network.jpeg

14. Print files of a specific kind. For example, let’s assume you want to print all ‘.jpeg‘ files, use the following command.

$ echo *.jpeg network.jpeg

15. The echo can be used with a redirect operator to output to a file and not standard output.

$ echo "Test Page" > testpage ## Check Content [email protected]:~$ cat testpage Test Page
echo Options
 Options Description
 -n do not print the trailing newline.
 -e enable interpretation of backslash escapes.
 \b backspace
 \\ backslash
 \n new line
 \r carriage return
 \t horizontal tab
 \v vertical tab

That’s all for now and don’t forget to provide us with your valuable feedback in the comments below.

Tags commands

If you liked this article, then do subscribe to email alerts for Linux tutorials. If you have any questions or doubts? do ask for help in the comments section.

If You Appreciate What We Do Here On TecMint, You Should Consider:

TecMint is the fastest growing and most trusted community site for any kind of Linux Articles, Guides and Books on the web. Millions of people visit TecMint! to search or browse the thousands of published articles available FREELY to all.

If you like what you are reading, please consider buying us a coffee ( or 2 ) as a token of appreciation.

Support Us

We are thankful for your never ending support.


Similar news:

What does the -e do in a bash shebang?

Your post actually contains 2 questions.

  1. The flag instructs the script to exit on error. More flags

    If there is an error it will exit right away.

  2. The is the exit status of the last command. In Linux an exit status of means that the command was successful. Any other status would mean an error occurred.

To apply these answers to your script:

would look for the in the file.

  • If it finds it then the exit status will be equal to .

  • If it doesn't find it the exit status will be something else (not ). Here, you will want to execute the part of the code.

Unfortunately there is an error in your script, and you would execute that code if the user exists - change the line to

to get the logic right.

However if the user doesn't exist, will return an error code, and due to the option the shell will immediately exit after that line, so you would never reach that part of the code.


1283 1284 1285 1286 1287