Как заставить команду выполниться, после того как определенная команда завершается?

Что я хочу сделать: Каждый раз, когда apt-get install команда выполняется и завершается, выполните другую команду сразу без любого участия на части пользователя. В моем случае я хочу запустить скрипт, но так как я могу заменить командой это, команда была бы предпочтительна как пример.

Между прочим, я не хочу запускать скрипт, который выполняет две команды, так как он должен затем быть вручную выполнен, который не является тем, что я хочу. Завершение apt-get install команда должна запросить выполнение другой команды.

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

Править:

Разъясниться: Я пытаюсь получить одну команду, которая работает два!
Почему? Я хочу генерировать файл, содержащий список всех установленных зависимостей и программное обеспечение на моем дистрибутиве, который обновляется каждый раз apt-get install команда используется.

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

2 ответа

Твердая часть анализирует аргументы правильно. Можно обработать простой apt-get install pkgname случаи легко, но как только Вы хотите обработать apt-get -y install pkgname, кроме того, Вам внезапно нужен абсолютный синтаксический анализатор опции.

Принятие простых случаев в порядке достаточно, что-то вроде этого, что сценарий обертки может удовлетворить:

#!/bin/bash

/usr/bin/apt-get "$@"
status=$?

if [[ $1 = install ]]; then
    read -rp 'Run this other thing too [Y/n]? ' ans
    if [[ ${ans:-y} = [Yy] ]]; then 
        other-thing
        exit # exit with other-thing's exit status.
    fi
fi

exit "$status" # exit with apt-get's exit status.
3
ответ дан 26 July 2019 в 14:19

Существует несколько путей, в зависимости от Вашего намерения.

Последовательное выполнение может меня покончить ; разделитель. Это будет сделано в последовательности, каждая команда работает независимо за статусом выхода предыдущей команды. Пример:

echo hello; printf "\n\n%s" WORLD

Условное выполнение может быть сделано с булевыми операторами || и &&. С ними, осуществлением второй программы, зависит от статуса выхода первых (первое и второе чтение слева направо).

Для && поведение как таково: COMMAND1 && COMMAND2 , если COMMAND1 успешно завершенный, COMMAND2 будет работать. Можно помнить это, поскольку, "если оставлено успешно выполняется, право будет работать; если оставлено неудавшийся, правильный не будет работать" [-f/etc/passwd] &&, эхо "/etc/passwd существует"

Для || это противоположно, "Если оставлено успешно выполняется, право не будет работать; если левые сбои, право будет работать"

[ -d /etc/passwd ] || echo "/etc/passwd is not a directory"

Для помещения их в одну единственную команду существует несколько опций. Каждый, очевидно - сценарий, но поскольку Вы запросили, Вы не хотите сценарий. Альтернатива этому является функцией удара ИЛИ псевдонимом.

Функция Bash предпочтена, так как можно передать аргументы им если Вы, так требуйте.

В Вашем конкретном случае Вы хотите apt-get install который может взять несколько параметров

function installStuff
{
  apt-get install "$@"
  command2
}

Место это в Ваш .bashrc, где-нибудь наверху, близко .bashrc и выполненный source .bashrc. Теперь у Вас есть функция удара, которая всегда работает apt-get install во-первых, с любым количеством пакетов, которые требуют, и затем сразу command2

Как так

installStuff package1 package2 package3

Для условного выполнения command2 используйте && и || операторы я уже упомянул.

1
ответ дан 26 July 2019 в 14:19

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

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