How do I Exit a Bash Script?
The first method we have been utilizing in this example is to use the “exit” statement in the bash script. Create a new file in the shell with the help of a “touch” command and open it in any editor.
The read statement is widely known to get input from the user. Here it will take integer values at run time and save them to the variable “x”. The “if” statement has been checking a condition. If the value of “x” entered by a user is equaled to 5, it will display that the number is matched via the echo statement. The “exit 0” clause has been used here. After executing the “echo” statement, the bash script will be quitted, and no more execution will be performed due to “exit 0”. Otherwise, if the condition doesn’t satisfy, the “echo” statement outside of the “if” statement will be executed.
Run your bash file with the help of a bash query in the shell. The user added 4 as input. As 4 is not equal to 5, it doesn’t run the “then” part of the “if” statement. So, no sudden exit will happen. On the other hand, the echo statement outside of the “if” statement executed states that “Number doesn’t match..” and the program ends here.
Run the same code once again with the bash command. The user added 5 this time. As 5 satisfies the condition, the “echo” statement inside the “then” clause was executed. After that, the program stops quickly due to the use of “exit 0”.
Example 02: Using Exit
Instead of using “exit 0”, you can simply use “exit” in your bash script to exit the code. So, open the same file and update your code. Only the “exit” clause has been changed here, i.e., replaced by “exit”. The whole file remained unchanged. Let’s save the code first using the “Ctrl+S” and quit using “Crl+X”. Let’s execute it to see if it works the same as the “exit 1” clause does or not.
Run the bash file “bash.sh” in the terminal by utilizing the command shown in the attached screenshot. The user entered the value “6” and it didn’t satisfy the condition. Therefore, the compiler ignores the “then” clause of the “if” statement and executes the echo clause outside of the “if” statement.
Run the same file once again. This time the user added 5 as satisfying the condition. Thus the bash script exits right after executing the “echo” clause inside the “if” statement.
Example 03: Using Exit 1
You can also use the “exit” clause to exit the bash script while stating 1 with it at run time. So, open the same file and update your code as we have done before. The only change is “exit 1” instead of “exit” or “exit 0”. Save your code and quit the editor via “Ctrl+S” and “Ctrl+X”.
At first execution, the user added 6 as input. The condition doesn’t satisfy and commands within the “if” statement won’t be executed. So, no sudden exit happened.
On the second attempt, the user added 5 to satisfy the condition. So, the commands within the “if” statement get executed, and the program exits after running the “echo” clause.
Example 04
Let’s make use of the “exit 1” clause in the bash script upon checking different situations. So, we have updated the code of the same file. After the bash support, the “if” statement has been initialized to check if the currently logged-in user, i.e., “Linux” is not the root user. If the condition satisfies, the echo statement within the “then” clause will be executed, and the program will exit right here. If the currently logged-in account is a root user, it will continue to execute the statements outside of the “if” statement. The program will continue to get two inputs from a user and compute the sum of both integers. The calculated “sum” will be displayed, and then the program will exit.
As the “Linux” account is not a root user of our Ubuntu 20.04, the execution of this code has only executed the “if” statement and clauses between it. The program quits after this.
Example 05: Using “set -e” Built-in
The “set –e” built-in is widely known to exit the program upon encountering the non-zero status. So, we have added 3 twin-named functions with 1 echo statement and a return status clause in each. The “set +e” is initialized before calling the first two methods, and “set –e” is used after that, and two functions are called after that.
Upon execution, both show1 and show2 function’s echo statements will run, and the program will not quit. While after “set –e” the program quits after the execution of the show2() method’s echo statement as it encounters “return 1”. The method show3 will not be called after that.
Upon running this code, we got the output as expected. Upon encountering the return 1 status, the program stopped without executing the “show3()” method.
Conclusion
This guide covers all the possible ways to exit any bash script while writing, executing, or running. Thus, try to implement each example covered in this article to get a more clear understanding.
About the author
Omar Farooq
Hello Readers, I am Omar and I have been writing technical articles from last decade. You can check out my writing pieces.
How to kill a script running in terminal, without closing terminal (Ctrl + C doesn't work)?
I have written a bash script that calls several other programs and executes a bunch of commands. I run this script from the terminal. Now I want to kill the script.
Pressing Ctrl + C sometimes doesn’t cut it, I think because sometimes the script is executing another program, and for some reason the kill signal doesn’t work.
However, if I close the terminal window, it kills the script.
Is there something I can do (a keyboard combination), that is analogous to closing the terminal window, without actually closing the terminal window (I don’t want to lose command history, current directory, output history, etc.)?
4 Answers 4
You have few options. One is to stop the script ( Ctrl Z ), get the PID of the script and send SIGKILL to the process group.
When a command is executed in a shell, the process it starts and all its children are part of the same process group (in this case, the foreground process group). To send a signal to all processes in this group, you send it to the process leader. For the kill command, process leader is denoted thus:
Where PID is the process ID of the script.
Consider a script test.sh which launches some processes. Say you ran it in a shell:
In another terminal,
In this case, to send a signal to process group created by test.sh , you’d do:
-INT is used to send SIGINT , and so this command is the equivalent of pressing Ctrl C on the terminal. To send SIGKILL :
You only need to stop the script if you can’t open another terminal. If you can, use pgrep to find the PID.
One of the commands that the script launches may be trapping SIGINT , which is probably why Ctrl C is ineffective. However, SIGKILL can’t be trapped, and it is usually a last-resort option. You might want to try SIGTERM ( -TERM ) before going for the kill. Neither SIGKILL or SIGTERM can be set up as a keyboard shortcut the way SIGINT is.
All this is moot if your script doesn’t contain a shebang line. From this SO answer:
Usually the parent shell guesses that the script is written for the the same shell (minimal Bourne-like shells run the script with /bin/sh, bash runs it as a bash subprocess) .
Because of this, when the script is executed, you won’t find a process named after script (or a process with the script’s name in the command line) and pgrep will fail.
прервать выполнение программы в консоли
А, вон он о чем. Мастерски вопросы люди задают, я шизею просто.
Готовься кивопросам «че это», «а как» и «напишите мне на языке программирования выход из программы».
покажите как пожалуйста? программа закрывается с помощью ctrl+z
Ну расскажите подробнее — что за программа, каким действием вы хотите ее закрыть, что вы уже пробовали, что нагуглили.
закрывается с помощью ctrl+z она
Как программно реализовать такой выход в консоли
Как из другой программы закрыть эту программу?
Как свою программу сделать закрывающейся по Q?
Сформулируй, что тебе вообще нужно-то, а то вон телепаты мимо бьют.
Ну расскажите подробнее — что за программа, каким действием вы хотите ее закрыть, что вы уже пробовали, что нагуглили.
Какой информативный ответ. Так и быть, давайте еще раз попробуем:
ну расскажите подробнее — что за программа, каким действием вы хотите ее закрыть, что вы уже пробовали, что нагуглили.
unixforum.org
А что там может отличаться? Он или передаёт сочетание клавиш шеллу, или нет.
монах Тук
Я правильно понимаю, что Ctrl+C прерывает sleep, но не цикл? То есть в Вашем примере при нажатии сразу же печатается дата?
в консоли вку́пе (с чем-либо) в общем вообще |
в течение (часа) новичок нюанс по умолчанию |
приемлемо проблема пробовать трафик |
Re: Как прервать операцию в консоли?
Re: Как прервать операцию в консоли?
Сообщение yars » 18.02.2016 07:01
Re: Как прервать операцию в консоли?
Сообщение Olej » 18.02.2016 13:26
killall посылает сигна не по PID, а по имени процесса.
Но указанное действие можно сделать с kill.
Re: Как прервать операцию в консоли?
Re: Как прервать операцию в консоли?
Прежде, чем я приступлю к работе (я сейчас с винды пишу), внесу уточнение, важно оно или нет не знаю, но меня не спрашивали, а сам я сразу и точно не могу оценить степень важности, ибо я ноль полный. Быть может, оно прольёт свет на проблему.
Ctrl+Z и Ctrl+C не печатают ^Z или ^C, а печатают просто Z или C
Re: Как прервать операцию в консоли?
в консоли вку́пе (с чем-либо) в общем вообще |
в течение (часа) новичок нюанс по умолчанию |
приемлемо проблема пробовать трафик |
Re: Как прервать операцию в консоли?
Re: Как прервать операцию в консоли?
ну да, висит и пусть висит. Понимаете, это удобно для меня очень. Я годами так работал. Это из-за этого? Похоже, что из-за этого, я убрал переключение языков с Ctrl и Ctrl+C заработало нормально.
А можно как-нибудь по-другому достичь эффекта Ctrl+C? Сразу скажу, что убиение какого-либо процесса вряд ли приведёт к желаемому результату, ибо Ctrl+C не убивает, по-моему никакой процесс. По крайней мере я не заметил в htop чтобы что-то исчезало. Хотя конечно, наглядность там та ещё.
Я работаю в консоли, которая такой чёрный квадратик на панели. "Konsole Terminal", командная строка /bin/bash -l
Если чё- это самое начало Робачевского и Немнюгина
Re: Как прервать операцию в консоли?
Да. В иксах переключение раскладки реализовано по-дурацки, поэтому вешать его на клавиши-модификаторы нельзя: сочетания с их участием перестают работать.
Понимаем, но придётся переучиваться или страдать. Попробуйте переназначить на win/menu, всё равно ведь бесполезные клавиши.
Конечно не убивает. Всего лишь отправляет SIGINT. Как правило, в результате процесс незамедлительно самоубивается.