не выполняет то, что он должен делать?

Я создаю сценарий bash, где мне нужно подождать несколько секунд (макс. 10), затем запустите несколько команд. Это связано с тем, что при запуске программы она также запускает несколько бесполезных подпроцессов, которые мне не нужны. Но, как я уже сказал, для начала это занимает несколько секунд, поэтому я сделал следующее:

here is where the program is started && sleep 20 && kill `ps -x | grep explorer.ex[e] | awk '{print $1}'` && kill `ps -x | grep winewrapper.ex[e] | awk '{print $1}'` 

Но после sleep он просто падает на сон, он не запускает команды kill, и вместо этого я должен запускать их вручную, чтобы пропустить точку этого скрипта. Что я должен сделать? Я неправильно использую команду sleep ?

EDIT: Поскольку этот вопрос предлагается закрыть, хотя я бы уточнил.

Процесс sleep не просыпается, и команды pkill не запускаются. Вот мой весь скрипт (это AppleScript, но я использую unix-скрипты из AppleScript):

 do shell script "killall applet && cd /Applications/Dishonored.app/Contents/Resources/Dishonored/Binaries/Win32 && /Applications/CrossOver.app/Contents/SharedSupport/CrossOver/bin/wine --bottle ny\\ flaska\\ 2 Dishonored.exe && sleep 20 && kill `ps -x | grep explorer.ex[e] | awk '{print $1}'` && kill `ps -x | grep winewrapper.ex[e] | awk '{print $1}'`" 

Что я могу сделать, чтобы заставить sleep проснуться и продолжить команды pkill через 20 секунд?

One Solution collect form web for “не выполняет то, что он должен делать?”

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

Давайте перейдем к вашим чересчур сложным командам уничтожения. Это не настоящая проблема, но остальная часть ответа – и ваше возможное решение – яснее, если вы переключитесь на pkill . Он делает то же самое, что и ваш ps + grep + awk + kill в рамках одной команды. Это не только более эффективно и проще вводить, но и не требует какого-либо регулярного выражения, чтобы отфильтровать команду grep из результатов ps , что является распространенной ошибкой, которая приводит к тому, что конвейер рано ломается, оставляя запущенные процессы убит. Ваш шаблон grep избегает этой ошибки, но легко забыть о необходимости. Я вижу из вашего вопроса, что вы на OS X, так что у вас есть pkill . Вам нужно сопоставить аргументы с командой вместо имени процесса, но вы можете сделать это с флагом -f .

С этой точки зрения, первым вероятным источником вашей проблемы является то, что ваша исходная команда может выйти из кода ошибки. Поскольку вы используете оператор && , последующие команды будут выполняться только в том случае, если первый возвращает код выхода 0, что означает «отсутствие ошибки». Если вы хотите, чтобы эти команды запускались независимо, вам нужно использовать ; вместо:

 ./myprogram ; sleep 20 && pkill -f explorer.exe && pkill -f winewrapper.exe 

Обратите внимание, что можно смешивать оба стиля. Мы говорим: «Бегите с myprogram безоговорочно, дождитесь ее выхода, а затем запустите все остальное, все из которых должны успешно вернуться, чтобы продолжить цепочку команд». sleep никогда не потерпит неудачу, но если первый шаг pkill может потерпеть неудачу, и вы хотите, чтобы второй выполнялся независимо, переключите второй && на ; , слишком.

Другая возможность заключается в том, что вы ожидаете, что эти команды kill будут выполняться, пока Wine / CrossOver все еще работает с Dishonored.exe . То есть, вы хотите, чтобы killin начал 20 секунд после запуска Wine, а не через 20 секунд после его выхода. Если эта программа не отрывается от фона, вы получите последнее поведение. Если вам требуется параллельное поведение, вам нужно заложить первую программу:

 ./myprogram & sleep 20 && pkill -f explorer.exe && pkill -f winewrapper.exe 

Команда & завершает первую команду ; в предыдущем примере, за исключением того, что остальная часть командной строки запускается, как только запускается myprogram .

  • Примените SHA256 и Base64 к строке в скрипте
  • Shell Script для удаления двойных кавычек в пределах значения столбца
  • Создание личного монтирования tmpfs в сценарии оболочки
  • Как передать второй аргумент в функции bash
  • Как активировать Virtualenv при запуске скрипта Python?
  • Как перемещать файлы с тем же именем и объединяться
  • -ksh: income_ext.ksh: не найден
  • Как проверить, является ли данный путь файлом или каталогом
  • Сохранение вывода в переменной и повторное использование
  • notepad ++ добавляет \ r к скриптам оболочки
  • как использовать syslog, чтобы избежать искажения файла журнала, когда несколько процессов просматривают один и тот же файл журнала?
  • Interesting Posts

    Есть ли способ настроить TCP на потерю пакетов и повторную передачу?

    Функциональные сценарии оболочки

    Как напрямую подключить sdb или использовать разделы LVM на sda?

    отказоустойчивая замена

    Обновление скорости обмена данными Berkeley DB в ОС Centos

    Sed для копирования части имени файла в другое содержимое файла с той же подстрокой

    Является ли HTTP-перенаправление рассмотренным как связанное соединение с помощью iptables?

    Настройка FreeBSD для получения IP-адреса с моего сервера FreeBSD DHCP

    Клавиатура Gnome-shell для «Внутреннего микрофона» на XF86Send

    Что обрабатывает уведомления в чистой среде Openbox?

    Обновление / установка несистемно-важных приложений

    Система пакетного растяжения Debian ломается, когда несвободные добавлены

    Наследование прав на запись группы, но не выполнение для файлов, на OmniOS (Illumos) с использованием ZFS ACL

    Как команда sed '1! G; h; $! D' отбрасывает содержимое файла?

    Суммирование значений, если значение второго столбца

    Linux и Unix - лучшая ОС в мире.