Это либо:
interpret_this_shell_code() {
eval "$1"
}
Или:
interpret_the_shell_code_resulting_from_the_concatenation_of_those_strings_with_spaces() {
eval "$@"
}
, или:
execute_this_simple_command_with_these_arguments() {
"$@"
}
Но:
execute_the_simple_command_with_the_arguments_resulting_from_split+glob_applied_to_these_strings() {
$@
}
Не имеет особого смысла.
Если вы хотите выполнить команду ls -l
(а не команду ls
с аргументами ls
и -l
) , вы бы сделали:
interpret_this_shell_code '"ls -l"'
execute_this_simple_command_with_these_arguments 'ls -l'
Но если (что более вероятно), это команда ls
с ls
и -l
в качестве аргументов, вы бы запустили :
interpret_this_shell_code 'ls -l'
execute_this_simple_command_with_these_arguments ls -l
Теперь, если это больше, чем простая команда, которую вы хотите выполнить, если вы хотите назначать переменные, перенаправления, каналы ..., только interp_this_shell_code
подойдет:
interpret_this_shell_code 'ls -l 2> /dev/null'
хотя, конечно вы всегда можете сделать это:
execute_this_simple_command_with_these_arguments eval '
ls -l 2> /dev/null'
CUPS записывает все параметры (и метаданные ), перемещающиеся по заданию, вc
-файлы (управляющие файлы ), перемещающиеся вместе с фактическим файлом данных буфераd
-в /var/ катушка/чашки/ .
Управляющие файлы называются cNNNNNN
, где NNNNNN представляет идентификатор задания CUPS.
Этот бит я всегда знал. Вчера мне нужно было поближе изучить эти файлы, но, поскольку они закодированы в двоичном формате, простойstrings
-запуск для них не дал достаточно хорошего результата.
Сначала я задал похожий вопрос на StackOverflow, но позже нашел инструмент, который может анализировать файлы c -. Он есть в исходном коде CUPS, но не собирается по умолчанию, и, следовательно, его почти никогда не увидит даже самый заядлый пользователь CUPS (, а также не собирается сборщиками дистрибутива Linux ).
Его зовутtestipp
.
Как его собрать и как использовать я описал на StackOverflow, здесь:
Если вы знаете, как запустить программу просмотра PDF-файлов из командной строки, например, как xpdf my.pdf
, то вместо этого используйте следующее:
strace -f -e execve xpdf my.pdf
Это выведет строки типа
execve("/usr/bin/lp", ["lp", "-abc", "my.pdf"],...
, которые показывают выполняемые команды с аргументами, показанными в массиве [,,,]
.
Если вы не можете запустить средство просмотра из командной строки, найдите для него идентификатор процесса (с помощью ps fax
или аналогичного ), и если это, скажем, 2519, прикрепите к нему strace с помощью:
strace -f -e execve -p 2519
Вы должны получить аналогичный результат. Наберите control -c , чтобы убить трассировку.
Это может не раскрыть выполнение lp
, но вы можете попросить strace показать больше того, что делается, если это необходимо.
Если у вас есть доступ к файлу CUPS error_log
(обычно в /var/log/cups/
), и если CUPS имеет LogLevel debug
в настройках (в файле/etc/cups/cupsd.conf
), то вы можете увидеть какие аргументы командной строки передаются для каждого задания в CUPS путем поиска строки (s ), содержащей строку argv[5]
.
argv[5]
содержит все эти параметры, которые CUPS видел в пятом аргументе командной строки каждого фильтра. Перед ними в той же строке вы также увидите соответствующий идентификатор задания, напечатанный как [Job NNNNNN]
.