Оболочка файла открывает терминал и запускает последовательность команд в определенном порядке

То, что я делал, это:

  1. Вручную откройте экземпляр терминала для запуска следующих команд и файлов оболочки

  2. Бежать

    PACKAGE_PATH=/home/userA/package1:/home/userA/package2:$PACKAGE_PAT‌​H
    
  3. бежать:

    cd /home/userA/scripts
    
  4. бежать:

    varset.sh
    

    который экспортирует и устанавливает некоторые переменные.

  5. бежать:

    source ff.sh $input $output
    
  6. бежать:

    bb.sh
    

    который просит меня ввести номер во время его выполнения.

  7. бежать

    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_PAT‌​H

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,

Другие вопросы по тегам