LINUX.ORG.RU
решено ФорумAdmin

Что означает «exec» перед командой bash?

 


1

2

Я читал про перенаправление потоков с пом. exec, вроде-бы понимаю смысл, вроде-бы понимаю как это работает, но видимо только методично. Например в bash скриптах я встречал использование echo просто так:

echo text
и так:
exec echo text
В чем отличие? Зачем «exec»?
В чем будет отличие если я буду, например, вызывать интерпритатор питона, mount’ить фс, запускать какой-то демон или какой-то foreground процесс используюя «exec» и нет?
Я вот разницу заметил только используя
exec apt-get update
в юбунте сразу после ввода которого терминал просто закрылся, а список пакетов так и не обновился. После такого мне больше не захотелось всюду пробовать exec.



Последнее исправление: Kukuster (всего исправлений: 1)

своими словами если, это значит что запущенный процесс подменит собой шелл.

ты запускаешь эмулятор терминала, эмулятор терминала выполняет bash — эту самую командную строку.

запуская программу через exec ты передаёшь управление этой программе, вместо bash, а bash закрывается. то есть, запускаешь exec top, теперь в эмуляторе терминала запущен не: bash - top, а просто top. и закрывая top, эмулятору терминала больше нечего выполнять, он закономерно закрывается.

Spoofing ★★★★★
()
Ответ на: комментарий от Spoofing

ок, допустим, это я понял. Действительно, если запустить интерпритатор python без exec, то выйдя с него возвращаешся в bash, а если с ним то нафиг из терминала. Зачем можно выполнять echo с exec? Какой-то абсурд. И почему тогда apt-get update не выполнился и потом закрылся? или хотябы, если терминал ему не нужен, обновил бы пакеты без терминала, но нет.

Kukuster
() автор топика
Ответ на: комментарий от Spoofing

кажись понял.
походу в скрипте bash, если встречается exec echo, то сразу после его выполнения программа прерывается. Получается exec в скриптах bash только для последнего действия, которое не должно возвращать никакого значения в программу этого самого скрипта.
А почему exec apt-get update не обновил пакеты я так и не понял.

какой-то зашквар
ладно, вопрос закрыт

Kukuster
() автор топика
Ответ на: комментарий от Kukuster

apt-get update не обновляет пакеты, а только «базу данных» пакетов.

apt-get upgrade — уже обновляет пакеты.

anonymous
()
Ответ на: комментарий от anonymous

пардон, я это и имел введу. В любом случае, когда я выполнил apt-get update через некоторое время, понял что база данных пакетов давно не обновлялась

Kukuster
() автор топика

Помимо всего прочего echo text — это обращение ко встроенной в Баш функции, а exec echo text — ко внешней утилите echo (да, такая есть, /bin/echo, как правило).

И я решительно не понимаю, зачем это может быть нужно. Или вы это в качестве примера придумали, а вовсе не видели такое где-либо?

Zmicier ★★★★★
()
Последнее исправление: Zmicier (всего исправлений: 1)
Ответ на: комментарий от Zmicier

И я решительно не понимаю, зачем это может быть нужно. Или вы это в качестве примера придумали, а вовсе не видели такое где-либо?

Я такого тоже не встречал, но имхо можно использовать для выхода из программы по условию, с сообщением в консоль.

ashot ★★★★
()

Я себе скрипт для автозагрузки окружения говнякал, например, примерно такой:

#!/bin/bash

(exec sublime_text Blah-blah.sublime-project) && \
(exec nemo /home/haroshea/projects/xxx) && \
(exec gnome-terminal /home/haroshea/projects/xxx) && \
(exec firefox)
Правда, потом сообразил, что в Cinnamon должно быть штатное средство для добавления в автозагрузку :}.

Virtuos86 ★★★★★
()
18 августа 2016 г.

увидел использование exec в скрипте запуска lightstreamer и полез в поиск. Спасибо за тред.

targitaj ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.