2

Я написал скрипт ~/_bin/bcg для вызова другого скрипта, который использует gimp для изменения размера случайного изображения из каталога, а затем записывает его обратно в другой файл. Мой (toplevel) скрипт затем использует hsetroot чтобы установить фон X для этого изображения.

Единственная проблема в том, что как только я вызову скрипт другого парня с exec !/_bin/aura , мой скрипт останавливается.

  1. Есть ли способ вызывать программы и скрипты без exec?
  2. Есть ли способ предотвратить гильотину exec моего сценария?

Если я запускаю вещи без exec, я получаю:

execvp: нет такого файла или каталога

Я предполагаю, что это означает, что bash неявно использует некоторую программу execvp для разбора каждой строки, и эта программа не может найти (или не выполнится) ~/_bin/aura .

Я могу ввести каждую строку в терминале и получить то, что я хочу. Я просто не могу поместить все это в сценарий, но это то, что я хочу.

Что я могу сделать?

#!/bin/bash
if [ -f ~/.bcg.bmp ]
then
        rm ~/.bcg.bmp
fi
~/_bin/aura "~/_wall";
hsetroot -center ~/.bcg.bmp

2 ответа2

2

Обычно, когда вы вызываете команду в скрипте bash, оболочка ждет, пока команда не завершится, и затем запускает следующую команду. Когда вы используете exec , вы говорите оболочке заменить себя командой, которую она собирается запустить, то есть после запуска команды оболочки не будет. Поэтому, когда команда завершается, создается впечатление, что исходный сценарий также завершился. Вы должны запустить свою команду без exec если хотите, чтобы скрипт продолжал выполняться после ее завершения.

execvp: No such file or directory не выглядит как сообщение об ошибке bash. Вероятно, это происходит из сценария aura , который пытается запустить что-то, что не может быть найдено в вашем пути поиска.

0

Когда вы цитируете ~, он теряет свое особое поведение, но вы можете использовать $ HOME

#~/_bin/aura "~/_wall";
~/_bin/aura "$HOME/_wall";

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .