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

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

  • Как добавить слово для строки, в которой выполняется транспонирование
  • Как использовать printf и% s при наличии цветовых кодов?
  • Каков наилучший инструмент для автоматизации 32-64-битных библиотек для Unix и Windows, создающих программное обеспечение на C ++, воспроизводимое пользователями и машинами?
  • Как вычесть даты из колонок с помощью awk?
  • Условное выполнение - запуск постоянных подпроцессов и коротинов
  • Как «захватить» соответствующие файлы из файла поиска в bash?
  • Как удалить файлы в одной папке, которая старше 60 дней в UNIX?
  • Сценарий Bash для автоматического резервного копирования tar выбранных файлов и каталогов
  • Команда для уничтожения определенного PID, предоставленного предыдущей командой
  • Как создать скрипт, который не может быть легко удален
  • Почему полный путь к / usr / bin / time влияет на вывод?
  • bash: test, если $ WORD находится в наборе
  • Linux и Unix - лучшая ОС в мире.