start-stop-daemon заключил в кавычки неправильно истолкованные аргументы

Если Вы ищете способ применить "статическое" ключевое слово к классу, как Вы может в C#, например, то Вы не будете в состоянии, не используя Управляемый С++.

, Но взгляды Вашего образца, просто необходимо создать общедоступный статический метод для объекта BitParser. Как так:

BitParser.h

class BitParser
{
 public:
  static bool getBitAt(int buffer, int bitIndex);

  // ...lots of great stuff

 private:
  // Disallow creating an instance of this object
  BitParser() {}
};

BitParser.cpp

bool BitParser::getBitAt(int buffer, int bitIndex)
{
  bool isBitSet = false;
  // .. determine if bit is set
  return isBitSet;
}

можно использовать этот код для вызова метода таким же образом как примера кода.

Hope, которая помогает! Аплодисменты.

21
задан Flimzy 9 December 2014 в 19:18
поделиться

3 ответа

Я решил опубликовать последние цитаты, использованные в моем рабочем сценарии инициализации:

COMMAND="/path/to/script -opt param param2 param3"
DAEMON_OPTS=" 0.0.0.0:$PORT -dest $OUTPUT_DIRECTORY -command"

start-stop-daemon --start --background --make-pidfile --pidfile $PID --exec $DAEMON -- $DAEMON_OPTS "\"$COMMAND\""

Очевидно, неполный и нефункциональный пример, но я надеюсь, что вы уловили его суть. Двойные кавычки с ускользнувшей внутренней парой - вот что помогло.

9
ответ дан 29 November 2019 в 21:41
поделиться

Попробуйте

DAEMON_OPTS="-la '/folder with space/'"
start-stop-daemon --start ... -- $DAEMON_OPTS

Что происходит, так это то, что внешние кавычки DAEMON_OPTS удаляются, а внутренние (одинарные кавычки) остаются. Итак, следующая строка будет гласить:

start-stop-daemon --start ... -- -la '/folder with space/'

, что вы хотите.

Также можно добиться того же эффекта с помощью экранирования, но для этого вам понадобится много экранирований: Во-первых, чтобы защитить кавычки во время присваивания, затем позже, когда начальная строка будет проанализирована и переменные будут расширены, и, возможно, даже больше или меньше. :) bash -x - ваш друг для подобных вещей.

[EDIT] Приведенный выше код работает с оболочкой Bourne и Korn на чем угодно, кроме Linux. В Linux с ksh или bash оболочка добавит дополнительные кавычки, которые все испортят:

FOLDER="/folder with space/"
DAEMON_OPTS="-la $FOLDER"
start-stop-daemon --start ... -- $DAEMON_OPTS

Если вы запустите его с -x , вы увидите:

FOLDER='/folder with space/'
DAEMON_OPTS='-la ~/folder with space/'
ls -la '~/folder' with space/

Таким образом, только первое слово получает защиту (вероятно, потому, что оно содержит специальный символ). Если я добавлю одинарные кавычки вокруг $ FOLDER , я получу:

FOLDER='/folder with space/'
DAEMON_OPTS='-la '\''~/folder with space/'\'''
ls -la ''\''~/folder' with 'space/'\'''

Отлично. Обходной путь: разделите параметры на две переменные: одну с параметрами, а другую с путем:

start-stop-daemon --start ... -- $DAEMON_OPTS "$DAEMON_PATH"

[EDIT2] Это тоже работает:

FOLDER="$HOME/folder with space/"
opt[0]=-la
opt[1]=$FOLDER
ls "${opt[@]}"

т.е. поместить слова в массив.

15
ответ дан 29 November 2019 в 21:41
поделиться

Вы пробовали сделать наоборот с кавычками? Примерно так:

DAEMON_OPTS='-la "/folder with space/"'

Я не уверен, но это может сработать?

(Я бы опубликовал это как комментарий к предыдущему ответу, если бы у меня было достаточно репутации для этого).

0
ответ дан 29 November 2019 в 21:41
поделиться
Другие вопросы по тегам:

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