Как запустить команду сценария оболочки с двойными кавычками в аргументе? - PullRequest
1 голос
/ 06 августа 2010

Мне нужно запустить эту команду

psql -c "create database $var with encoding 'unicode';" -U edumate template1

из скрипта под другим пользователем.Синтаксис su su postre -c 'some command', поэтому требуются другие кавычки.Также обратите внимание, что команда psql имеет переменную $var внутри.

поэтому 'some command' = psql -c "создать базу данных $ var с кодировкой 'unicode';"-U edumate template1

и 'некоторая команда' тоже должна быть заключена в кавычки (я думаю)

Ответы [ 3 ]

5 голосов
/ 06 августа 2010

Есть трюк, который вы можете использовать в любое время, когда вам нужно, чтобы оболочка принимала в качестве единственного аргумента нечто, имеющее как одинарные, так и двойные кавычки.Поскольку оболочка не позволяет вам избегать кавычек, вам необходимо превратить ее в несколько примыкающих строк в кавычках, переключаясь между одинарными и двойными кавычками, чтобы защитить содержимое внутри.Это некрасиво, но это работает.Например, чтобы

   He said "It's done"

был единственным аргументом, вы можете добавить три строки:

   'He said "It'   - protect this substring with single quotes
   "'"             - protect this substring with double quotes
   's done"'       - protect this substring with single quotes

, чтобы получить:

   'He said "It'"'"'s done"'

В вашем случаеэто было бы очень уродливо:

su postre -c 'psql -c "create database '"$var with encoding 'unicode';"'" -U edumate template1'
1 голос
/ 06 августа 2010

Вы можете попробовать sudo вместо su например,

sudo psql -c "create database $var with encoding 'unicode';" -U edumate template1

(Примечание: я не проверял именно эту команду, так как сейчас у меня нет psql)

0 голосов
/ 06 августа 2010

Я хотел бы ввести это в файл сценария (введите его в редактор, такой как vi, и сохраните его в файл). Затем chmod + x и затем сделайте свой su -c '<filename>'

Если вы не хотите сохранять его в файл, вам придется экранировать кавычки с \" или \' внутри команды, в зависимости от того, какую цитату вы решите использовать с su -c

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...