1

Я пытаюсь использовать ghostscript в скрипте bash на моей Linux Ubuntu 13.04.

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

Я не знаю, как решить эту проблему.

Не могли бы вы помочь мне ?

Пример :

Мой сценарий:

#!/bin/bash
# Script PDF_test_ghs.sh

echo "Direct test :"
gs -o PDF_temp_01.pdf -sDEVICE=pdfwrite -g7000x5600 -c "<</PageOffset [360 380]>> setpagedevice" -f PDF_initial.pdf

echo ""
echo "Test with variable :"
command='gs -o PDF_temp_02.pdf -sDEVICE=pdfwrite -g7000x5600 -c "<</PageOffset [360 380]>> setpagedevice" -f PDF_initial.pdf'
$command
exit 0;

и результат:

ubuntu@ubun:~$ PDF_test_ghs.sh 
Direct test :
GPL Ghostscript 9.07 (2013-02-14)
Copyright (C) 2012 Artifex Software, Inc.  All rights reserved.
This software comes with NO WARRANTY: see the file PUBLIC for details.
Processing pages 1 through 3.
Page 1
Page 2
Page 3

Test with variable :
GPL Ghostscript 9.07 (2013-02-14)
Copyright (C) 2012 Artifex Software, Inc.  All rights reserved.
This software comes with NO WARRANTY: see the file PUBLIC for details.
Error: /undefined in "
Operand stack:

Execution stack:
   %interp_exit   .runexec2   --nostringval--   --nostringval--   --nostringval--   2   %stopped_push   --nostringval--   --nostringval--   --nostringval--   false   1   %stopped_push   .runexec2   --nostringval--   --nostringval--   --nostringval--   2   %stopped_push   --nostringval--
Dictionary stack:
   --dict:1167/1684(ro)(G)--   --dict:0/20(G)--   --dict:77/200(L)--
Current allocation mode is local
GPL Ghostscript 9.07: Unrecoverable error, exit code 1
ubuntu@ubun:~$

Первый работает, а второй нет. Я хочу использовать второе. Почему это не работает?

1 ответ1

0

Ваше утверждение не выполняется, потому что двойные кавычки внутри команды являются буквальными кавычками, а не синтаксическими. Когда вы запускаете $command , оболочка интерпретирует каждую разделенную пробелами часть как аргумент , а ваш

"<</PageOffset [360 380]>> setpagedevice"

больше не "склеивается" двойными кавычками.

В качестве простого примера попробуйте:

command='touch "foo bar"'
$command

Вы ожидаете, что будет создан файл с именем foo bar , но вместо этого вы получите "foo and bar" . Вместо этого вы можете попробовать:

eval $command

Здесь команда будет оцениваться так, как если бы она была набрана в оболочке. Но не ожидайте, что это будет работать всегда.


Вы должны прочитать:я пытаюсь поместить команду в переменную, но сложные случаи всегда терпят неудачу! - хранение команд в переменных никогда не рекомендуется. Переменные содержат данные, а не команды. Если вы хотите запускать команды повторно, вы должны использовать функции оболочки.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .