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

Я создаю сценарий 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 секунд?

  • Подводя массив внутри awk?
  • скрипт для регистрации всех статистических данных для определенного процесса
  • Обертка Bash, которая будет форматировать вывод другой программы
  • Получить общую продолжительность видеофайлов в каталоге
  • Рекурсивно удалять файлы с idx> 10000
  • Cygwin - Shell Scripting (eval и echo)
  • KSH / BASH Максимальный размер массива
  • Запустите процесс в определенном окне экрана, если он существует, в противном случае создайте этот экран, а затем сделайте это
  • 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 .

    Interesting Posts

    Используя cURL, как я могу получить числовую строку, содержащую запятые и пробелы, и преобразовать их в строку NON COMAFIED

    Как исправить шумное устройство ввода (Internal Mic)? snd_hda_intel – включена отладка

    Объединение двух файлов, соответствующих двум столбцам с несоответствиями и в каждой соответствующей строке, замените второй столбец из файла 1 на 6-й столбец в файле 2

    Как читать диски NTFS в Linux (RHEL 6)?

    Как запретить smbtree запрашивать пароль?

    разрешено разрешение на ошибку (publickey, keyboard-interactive) через ssh (scp) между linux

    Изменить имя поиска по умолчанию

    Увеличьте пространство виртуального жесткого диска на VMWare для Ubuntu

    Как создать цикл перенаправления

    Баш-переменные – любые трюки с экстрактами, основанные на заказе?

    Установите Puppy Linux или «Damn Small Linux» на Pogoplug (~ NSLU2)

    Как отключить соединение wifi, связанное с wpa_supplicant

    Пробуждение ноутбука от cron

    Каков максимальный раздел, поддерживаемый в Linux?

    Могу ли я ограничить соединения в секунду для определенных пользователей с помощью UFW?

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