There are 3 ways to run multiple shell commands in one line:
1) Use ;
No matter the first command cmd1 run successfully or not, always run the second command cmd2:
# cmd1; cmd2
$ cd myfolder; ls # no matter cd to myfolder successfully, run ls
2) Use &&
Only when the first command cmd1 run successfully, run the second command cmd2:
# cmd1 && cmd2
$ cd myfolder && ls # run ls only after cd to myfolder
3) Use ||
Only when the first command cmd1 failed to run, run the second command cmd2:
# cmd1 || cmd2
$ cd myfolder || ls # if failed cd to myfolder, `ls` will run
Top comments (12)
Ternary (or more) operations on a single line:
And can be multiple lines:
I use the
<CMD> && <SUCCESS_ACTION> || <FAIL_ACTION>
method quite a lot ...annoying that BASH-linters complain about it.Thanks for these examples, they are really helpful
Nice 👍 thanks for the add-up, Ian
You're welcome; I just thought it would add a little perspective of how this concept can be used in various ways. Some might always prefer to use if/else statements to be safe & sometimes it is necessary, but I find myself using this type of 'shortcut' more times than not when it's safe to use.
I was searching that for a long time. Thanks a lot.
I added it to .bashrc and .zshrc files with the alias commands . And now one command is enough for the maintain system operations.
Thanks for that
I'm quite happy with using ';', '|', etc. however I generally am using them from an 'end-user' perspective. I frequently use commands like:
then exit less, but may after want to see 'what was important in that file', is there a short hand way to run the last command of that sequence ... viz
less +G /tmp/out-comptest
?Thanks
thanks
Can this be nested?
A && (B && echo passed || echo B failed ) || echo A failed
Sure, but you need to re-write it slightly..
echo 'Test' > A
cat A && echo 'A passed' || echo 'A failed' && (cat B && echo 'B passed' || echo 'B failed')
Test
A passed
cat: B: No such file or directory
B failed