execvp: нет такого файла или каталога
Я написал скрипт ~/_bin/bcg
вызвать другой скрипт, который использует gimp для изменения размера случайного изображения из каталога, а затем записать его обратно в другой файл. Мой (toplevel) скрипт затем использует hsetroot
установить X фон для этого изображения.
Единственная проблема в том, что как только я вызываю скрипт другого парня с exec !/_bin/aura
Мой сценарий останавливается.
- Есть ли способ вызывать программы и скрипты без exec?
- Есть ли способ предотвратить гильотину 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 ответа
Обычно, когда вы вызываете команду в скрипте bash, оболочка ждет, пока команда не завершится, и затем запускает следующую команду. Когда вы используете exec
, вы говорите оболочке заменить себя командой, которую она собирается запустить, т. е. нет оболочки после запуска команды. Поэтому, когда команда завершается, создается впечатление, что исходный сценарий также завершился. Вы должны запустить свою команду без exec
если вы хотите, чтобы скрипт продолжал выполняться после завершения команды.
execvp: No such file or directory
не похоже на сообщение об ошибке bash. Это, вероятно, исходит от aura
скрипт, который пытается запустить то, что не может быть найдено в вашем пути поиска.
Когда вы цитируете ~, он теряет свое особое поведение, но вы можете использовать $HOME
#~/_bin/aura "~/_wall";
~/_bin/aura "$HOME/_wall";