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

То, что я раньше делал:

  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
    

Таким образом, я должен был вручную скопировать и вставить их в терминале перед каждым выполнением.

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

После применения предложения 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, не работает.

Таким образом, если кто-либо мог бы советовать, как выполнить эти команды и файлы оболочки в требуемой последовательности.

1
задан 13 April 2017 в 15:24

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 &&

&& afater каждая команда гарантирует, что следующий будет только выполнен, если первый выйдет успешно.

Теперь можно сохранить сценарий как ~/scripts/foo.sh, сделать его исполняемым файлом (chmod 744 ~/scripts/foo.sh) и выполнить его от терминала:

~/scripts/foo.sh

, С другой стороны, можно создать .desktop файл для него и выполнить его путем двойного щелчка, как объяснено здесь . Просто изменитесь Terminal=false строка к Terminal=true.

1
ответ дан 7 December 2019 в 16:32

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

Похожие вопросы: