Как я могу увидеть параметры, отправленные на чашки для задания на печать?

Это либо:

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'
1
28.09.2018, 17:39
3 ответа

CUPS записывает все параметры (и метаданные ), перемещающиеся по заданию, вc-файлы (управляющие файлы ), перемещающиеся вместе с фактическим файлом данных буфераd/var/ катушка/чашки/ .

Управляющие файлы называются cNNNNNN, где NNNNNN представляет идентификатор задания CUPS.

Этот бит я всегда знал. Вчера мне нужно было поближе изучить эти файлы, но, поскольку они закодированы в двоичном формате, простойstrings-запуск для них не дал достаточно хорошего результата.

Сначала я задал похожий вопрос на StackOverflow, но позже нашел инструмент, который может анализировать файлы c -. Он есть в исходном коде CUPS, но не собирается по умолчанию, и, следовательно, его почти никогда не увидит даже самый заядлый пользователь CUPS (, а также не собирается сборщиками дистрибутива Linux ).

Его зовутtestipp.

Как его собрать и как использовать я описал на StackOverflow, здесь:

1
27.01.2020, 23:23

Если вы знаете, как запустить программу просмотра 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 показать больше того, что делается, если это необходимо.

2
27.01.2020, 23:23

Если у вас есть доступ к файлу CUPS error_log(обычно в /var/log/cups/), и если CUPS имеет LogLevel debugв настройках (в файле/etc/cups/cupsd.conf), то вы можете увидеть какие аргументы командной строки передаются для каждого задания в CUPS путем поиска строки (s ), содержащей строку argv[5].

argv[5]содержит все эти параметры, которые CUPS видел в пятом аргументе командной строки каждого фильтра. Перед ними в той же строке вы также увидите соответствующий идентификатор задания, напечатанный как [Job NNNNNN].

0
27.01.2020, 23:23

Теги

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