Як і чому "exec false" закриває термінал?


8

Я знаю, що це, мабуть, порівняно безглуздо питання, але мені цікаво, чому exec falseзакривається термінал так само, як exitце робиться.

Я також хотів би знати, це прийнятний спосіб закрити термінал чи ні.


Відповіді:


10

exec false- це заміна поточної оболонки виконанням команди false(тут не вбудована оболонка, а /bin/falseбудь-який falseвиконуваний файл, який першим стає в PATH), який швидко закривається. Якщо оболонка була найвищим процесом, що працює у вашому емуляторі терміналу, всередині нього більше немає запущених процесів, тому емулятор термінала закритий.

Це прийнятний альтернативний спосіб закрити термінал, як і багато подібних команд:

exec true
exec sleep 0
exec echo
...

Дивіться також: що-що-робить-виконувати-командувати-робити


Як бічна примітка, bashвиконайте певну очистку перед тим, як викликати, execвключаючи написання команд .bash_history. Отже, якщо просто хочеться зберегти .bash_historyта запустити нову оболонку в тому ж вікні терміналу, можна зробити це, ввівши exec bash.
kasperd

Добре дякую, ви прекрасно відповіли на моє запитання :)
dragonloverlord

І гарне запитання! тому підтримує обидва! ;)
Fabby

@jiliagre execвикликає команди, знайдені PATH, а не вбудовані. Наприклад, exec [[ $USER = root ]]повернеться bash: exec: [[: not foundпомилка. У випадку ОП, falseщо називається є /bin/false, а не вбудована оболонка. Інакше хороша відповідь, отже +1. Як бічна примітка, execможе бути на зразок команда відсікання, тобто якби ці три команди у вашому прикладі були перетворені в сценарій, нічого, що перевищує перше, не execбуло б досягнуто, тому execщо замінить оболонку, викликану скриптом, будь-якою командою праворуч з exec.
Сергій Колодяжний
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.