То, что я раньше делал:
Вручную откройте терминальный экземпляр для выполнения следующих команд и файлов оболочки
Выполненный
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
Таким образом, я должен был вручную скопировать и вставить их в терминале перед каждым выполнением.
Что я хочу сделать, теперь должен поместить все это в файл сценария, который автоматически откроет терминал и выполнит их в последовательности так, чтобы следующая команда только работала, когда первый закончен, так, чтобы я не делал этого вручную больше.
После применения предложения muru нашел здесь, я использовал ниже сценария только для шагов 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
установлен, например, когда я использую $var1 эха (который найден в variables.sh), дисплей ничто, что означает, что переменные не установлены единственная вещь, которая работает в variables.sh, отображенное сообщение эха.
Вторая строка, которая появляется в каталог, является терминальным рабочим каталогом, который установлен на /home/userA/scripts
.
Третья вещь состоит в том что эта команда PACKAGE_PATH=PACKAGE_PATH=/home/userA/package1:/home/userA/package2:$PACKAGE_PATH
то, которое устанавливает переменную $PACKAGE_PATH, не работает.
Таким образом, если кто-либо мог бы советовать, как выполнить эти команды и файлы оболочки в требуемой последовательности.
Просто запишите сценарий:
#!/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 &&
&&
afater каждая команда гарантирует, что следующий будет только выполнен, если первый выйдет успешно.
Теперь можно сохранить сценарий как ~/scripts/foo.sh
, сделать его исполняемым файлом (chmod 744 ~/scripts/foo.sh
) и выполнить его от терминала:
~/scripts/foo.sh
, С другой стороны, можно создать .desktop
файл для него и выполнить его путем двойного щелчка, как объяснено здесь . Просто изменитесь Terminal=false
строка к Terminal=true
.