Тест, если команда принимает определенную опцию

От start-stop-daemon(8) страница справочника:

- x, - исполнительный исполняемый файл Check for processes that are instances of this executable (according to /proc/pid/exe)

Что означает, что это проверит на экземпляры /usr/local/zend/bin/php, и если это находит их не, запускают новый процесс. Если у Вас есть волшебный cookie:

#! /usr/local/zend/bin/php

на первой строке Вашего/var/www/server/consultpilot/ServerTicket.php сценария, и удостоверяются, что это - исполняемый файл с chmod, затем можно изменить его на:

DAEMON=/var/www/server/consultpilot/ServerTicket.php

и получите результаты, которые Вы ожидали бы.

3
10.09.2014, 18:33
4 ответа

Вы можете сделать тест на фиктивные данные, которые должны добиться успеха, если и только если опция доступна и работает, как ожидается:

trap 'if [ -e "$tmp" ]; then rm -rf -- "$tmp"; fi' EXIT
tmp="$(mktemp -d)"
cd -- "$tmp"
mkdir exclude
mkdir include
echo foo > include/test.txt
echo foo > exclude/test.txt
[ "$(grep --exclude-dir exclude --recursive foo . | wc -l)" -eq 1 ]
3
27.01.2020, 21:09

К счастью, существует относительно стандартизованный способ сообщать о потенциальных возможностях программ. Однако, он не всегда используется, поэтому это не дурацкий ответ, а просто ответ, защищенный от злоупотребления властью.

$prog --help | grep -e "\b$option\b"

(примечание, \b означает "граница слова". То есть после вашего $option не останется ни одного символа, поэтому $option-f не будет соответствовать)

Это вернет вам опцию, если она существует - но что более важно, вернет статус выхода 0, если она существует, или статус выхода 1, если его нет. Вы можете протестировать это с помощью:

$ # we pipe to /dev/null to hide the output, and show that it doesn't matter
$ grep --help | grep -e "\b--exclude-dir\b" > /dev/null
$ echo $?
0
$ grep --help | grep -e "\b--exclude-dirf\b" > /dev/null
$ echo $?
1

Это будет работать на многих программах, но не все имеют --help, то есть.... helpful. Вам также может повезти с

man $progr | grep -e "\b$option\b"

, если первая не сработает

.
5
27.01.2020, 21:09

Учитывая, что большинство (все?) Команды выходят с кодом возврата, превышающим нулю при вызове с неизвестными параметрами, вы можете попробовать

cmd --option-to-probe [other options and parameters] >/dev/null 2>/dev/null

и проверять, будет ли $? 0 или нет.

3
27.01.2020, 21:09

Можно посмотреть на man-страницу команды, что-то вроде этого:

CMD=grep
OPTIONS=""
for OPT in "--exclude-dir" "--text" "--not_an_option"; do
  if man $CMD | col -bx | egrep --quiet \\$OPT; then
    OPTIONS="$OPTIONS $OPT"
  fi
done
alias $CMD="$CMD $OPTIONS"
1
27.01.2020, 21:09

Теги

Похожие вопросы