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

Как закодировать дефис в открытой команде терминала Bash?
Linux Bash: перемещение / копирование файлов / каталогов по метке времени
Пробелы в переменных среды Linux?
Ctrl + C, чтобы разорвать бесконечный цикл, а затем сделать что-то вне цикла в сценарии bash без выхода?
команда rm: удалить файлы с именами, содержащими скобки
Что не так с моим сценарием bash, чтобы сохранить последние x-файлы и удалить остальные?
"read" работает как ожидалось в ZSH, но ведет себя по-другому при использовании любой другой оболочки
терминал iTerm/OSX: изменение поля текста от края окна
Проверьте, соответствуют ли какие-либо параметры скрипта bash строке
Как изменить цветовую схему в bash в Ubuntu для Windows?
Как удалить все вхождения значений в одном списке из другого списка?
Удалить расширение файла case-insentively in Bash
выполнить команду после завершения процесса в другой оболочке
Выполните команду терминала, не сохраняя ее.история bash на OS X?
Seamonkey не запускается в Debian Stretch

Bash-скрипт не выполняется при вводе команды в переменную

Я пытаюсь использовать 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:~$

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

5
задан slhck
источник

1 ответов

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

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

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

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

command='touch "foo bar"'
$command

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

eval $command

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


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

0
отвечен slhck 2014-01-19 20:57:08
источник

Другие вопросы bash linux