Что я хочу сделать: Каждый раз, когда apt-get install
команда выполняется и завершается, выполните другую команду сразу без любого участия на части пользователя. В моем случае я хочу запустить скрипт, но так как я могу заменить командой это, команда была бы предпочтительна как пример.
Между прочим, я не хочу запускать скрипт, который выполняет две команды, так как он должен затем быть вручную выполнен, который не является тем, что я хочу. Завершение apt-get install
команда должна запросить выполнение другой команды.
Примечание: Это может походить на дубликат этого вопроса, и в то время как у меня действительно есть ответ, я хочу ясно дать понять свое намерение в случае, если существуют любые другие возможные решения, также разъясняя мои требования к другим потенциальным средствам просмотра к этому вопросу.
Разъясниться: Я пытаюсь получить одну команду, которая работает два!
Почему? Я хочу генерировать файл, содержащий список всех установленных зависимостей и программное обеспечение на моем дистрибутиве, который обновляется каждый раз apt-get install
команда используется.
Твердая часть анализирует аргументы правильно. Можно обработать простой 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.
Существует несколько путей, в зависимости от Вашего намерения.
Последовательное выполнение может меня покончить ;
разделитель. Это будет сделано в последовательности, каждая команда работает независимо за статусом выхода предыдущей команды. Пример:
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 используйте &&
и ||
операторы я уже упомянул.