Первая строка является "хижиной" и используется для выполнения сценария, не имея необходимость передавать его как аргумент командной строке оболочки. Вторая строка является комментарием и понята только chkconfig
программа. Это используется, чтобы гарантировать, что сценарий запустится на определенном уровне выполнения.
От xargs
руководство:
Если Вы хотите, чтобы входной параметр содержал пробелы или горизонтальные вкладки, включите его в двойные кавычки или апострофы. Если аргумент содержит символ двойной кавычки (
"
), необходимо включить аргумент в апострофы. С другой стороны, если аргумент содержит апостроф ('
), необходимо включить аргумент в двойные кавычки. Можно также поместить обратную косую черту (\
) перед символом, чтобы сказать xargs игнорировать любое особое значение символ может иметь (например, пробельные символы или кавычки).
Это означает, что можно выйти из кавычек, если кавычки заключаются себя в кавычки:
$ echo "/Place/=\'http://www.google.com\'" | xargs echo
/Place/='http://www.google.com'
будет работать, но echo /Place/=\'http://www.google.com\' | xargs echo
не будет.
Вы могли использовать Параллель GNU вместо этого:
$ echo "/Place/='http://www.google.com'" | parallel echo
/Place/='http://www.google.com'
Затем Вы не должны делать заключения в кавычки себя.
Подробнее: https://www.youtube.com/playlist? list=PL284C9FF2488BC6D1
Я нашел здесь другое решение https://stackoverflow.com/a/17468560/1795821 , которое предлагает использовать sed
, чтобы избежать кавычек.
Например:
sh-3.2$ echo "/Place/='http://www.google.com'" | sed "s/\'/\\\'/g" | xargs echo
/Place/='http://www.google.com'
если вы хотите xargs
до игнорировать кавычки одним из хороших решений может быть использование флага xargs
xargs -0
Directly from Man page OPTIONS
OPTIONS -0, --null
Input items are terminated by a null character instead of by whitespace, and the quotes and backslash are not special (every character is taken literally). Disables the end of file string, which is treated like any other argument. Useful when input items might contain white space, quote marks, or backslashes. The GNU find -print0 option produces input suitable for this mode.
Я проверил в системе GNU, что установка разделителя на определенное значение (, например символ новой строки )с параметром -d
(, а не только -0
), также приведет к тому, что xargs
не будет относитесь к кавычкам и т.д. особенно:
-bash-4.3$ { echo "a'b'c"; echo d; } | xargs -d$'\n' echo
a'b'c d
-bash-4.3$ rpm -qf "$(which xargs)"
findutils-4.6.0.0.99.11a05-alt1.x86_64
-bash-4.3$ { echo "a'b'c"; echo d; } | xargs echo
abc d
-bash-4.3$
"/Place/='http://www.google.com'"
, как я могу правильно выйти из него? – Roger Filmyer 08.07.2015, 00:19