Оболочка файла открывает терминал и запускает последовательность команд в определенном порядке
То, что я делал, это:
Вручную откройте экземпляр терминала для запуска следующих команд и файлов оболочки
Бежать
PACKAGE_PATH=/home/userA/package1:/home/userA/package2:$PACKAGE_PATH
бежать:
cd /home/userA/scripts
бежать:
varset.sh
который экспортирует и устанавливает некоторые переменные.
бежать:
source ff.sh $input $output
бежать:
bb.sh
который просит меня ввести номер во время его выполнения.
бежать
bc.sh 8
Поэтому мне пришлось вручную копировать и вставлять их в терминал перед каждым запуском.
Теперь я хочу поместить все это в файл сценария, который автоматически откроет терминал и будет запускать их последовательно, чтобы следующая команда выполнялась только после завершения первой, чтобы мне не пришлось делать это вручную больше.
После применения предложенного здесь предложения Муру я использовал приведенный ниже сценарий только для шагов с 1 по 4, но он не работает должным образом:
gnome-terminal -x sudo -u userA bash -c 'PPACKAGE_PATH=/home/userA/package1:/home/userA/package2:$PACKAGE_PATH; cd /home/userA/scripts; source varset.sh; bash'`
Он не запускается в той же последовательности, что и я.
Это успешно открывает терминал, но первая строка появляется в терминале, это сообщение, которое находится в varset.sh
(хотя это должна быть третья команда для запуска), а другая вещь заключается в том, что ни одна из переменных, которые должны быть установлены с помощью этого varset.sh
устанавливается, например, когда я использую echo $var1 (который находится в variables.sh) не отображает ничего, что означает, что переменные не установлены, единственное, что работает в variables.sh, это отображаемое эхо-сообщение.
Вторая строка, которая появляется в каталоге, является рабочим каталогом терминала, который установлен в /home/userA/scripts
,
В-третьих, эта команда PACKAGE_PATH=PACKAGE_PATH=/home/userA/package1:/home/userA/package2:$PACKAGE_PATH
который устанавливает переменную $PACKAGE_PATH, не работает.
Поэтому, если кто-нибудь может посоветовать, как запустить эти команды и файлы оболочки в требуемой последовательности.
1 ответ
Просто напишите скрипт:
#!/usr/bin/env bash
PACKAGE_PATH=/home/userA/package1:/home/userA/package2:$PACKAGE_PATH
cd /home/userA/scripts
## You need to source this script if it defines variables. Otherwise
## the variables won't be available to your main script. '.' is the same
## as 'source' but more portable to different shells.
. varset.sh &&
. ff.sh $input $output &&
bb.sh &&
bc.sh 8 &&
&&
каждая команда гарантирует, что следующая будет запущена только в случае успешного завершения первой.
Теперь вы можете сохранить скрипт как ~/scripts/foo.sh
сделать его исполняемым (chmod 744 ~/scripts/foo.sh
) и запустить его из терминала:
~/scripts/foo.sh
Кроме того, вы можете создать .desktop
запустите файл двойным щелчком, как описано здесь. Просто измените Terminal=false
линия к Terminal=true
,