Посмотрите, работает ли скрипт при использовании #! / Usr / bin / env

Я попробовал мигрировать shebang для своих сценариев bash из #!/bin/bash в #!/usr/bin/env bash , а некоторые из них были сломаны, потому что они полагались на этот код, который проверяет наличие существующих экземпляров самих runnning и который работает только с #!/bin/bash :

 $ pidof -x myscript -o %PPID 

Я хотел бы знать, как я могу надежно проверить, запущен ли скрипт, вызванный env , поскольку большинство решений, которые я пробовал, будут связаны с некоторым грязным регулярным выражением, и все еще остаются ненадежными:

 $ pgrep -f '(^|/)myscript(\s|$)' 

Учитывая путь к моему сценарию: /home/user/myscript , приведенный выше код может вернуть PID для следующих нежелательных команд:

 editor /home/user/myscript bash /tmp/myscript bash /home/user/myscript with spaces 

One Solution collect form web for “Посмотрите, работает ли скрипт при использовании #! / Usr / bin / env”

В Linux вы можете использовать pgrep для получения PID вероятных подозреваемых и проверить первый аргумент этих PID (доступных в /proc/$PID/cmdline ). /proc/$PID/cmdline имеет все аргументы (включая аргумент 0) процесса, разделенные ASCII NUL ( \0 ).

Что-то вроде:

 pgrep bash | xargs -I {} sed -nz '2{p; q}' /proc/{}/cmdline | grep -Fqzx "$0" 

Это предполагает, что ваши sed и grep поддерживают нулевые строки. Команда sed печатает вторую строку соответствующих файлов cmdline (аргумент 1), которая будет именем сценария. Затем grep ищет точные совпадения имени вашего скрипта. Вы можете сделать весь матч в sed , но я не чувствую себя жонглированием цитатами.

Это не удастся, если вы вызовете свой сценарий по разным путям:

 /home/user/myscript cd /home; usr/myscript myscript 

Тем не менее, это должно быть безопасно против пробелов в именах сценариев.

  • Сохранение вывода stderr в переменной без модификации stdout и повторение этого действия
  • Окно GTK gtkdialog для создания ссылки
  • Apt-get не работает в bash-скрипте?
  • Как убить команду, выполненную из скрипта?
  • скрипты bash преобразуют прописные буквы в нижний регистр и наоборот
  • Расчет даты в скрипте для уведомлений
  • скрипт для копирования каталогов с определенным приращением
  • Тело нулевого сообщения; надеюсь, что все в порядке
  • Bash: перемещать файлы определенного шаблона
  • Как удалить английские символы из строки
  • Синтаксическая ошибка: "(" неожиданное (ожидающее слово) - в моем сценарии bash
  • Linux и Unix - лучшая ОС в мире.