LINUX.ORG.RU

cygwin + запуск 1С из скрипта = ошибка

 ,


0

1

Всем привет! Изучаю bash и решил немного автоматизировать действия 1С, с которым сталкиваюсь на своем месте работы.

Сделал небольшой скрипт на bash. Пока что задача самая простая: запустить некоторую локальную базу.

Такой момент: путь к 1С содержит пробелы C/Program Files/1cv8/common/1cestart.exe

Путь к базе тоже может содержать пробелы.

Шаблон строки запуска: Путь1С ENTERPRISE /F ПутьКбазе

Как я только не экспериментировал - и с ’ и с " - и к сожалению зашел в тупик.

Короткий скрипт такой (самая первая версия): 
exe1c='/cygdrive/C/Program Files/1cv8/common/1cestart.exe'
command="$exe1c"
echo "command: $command"
`$command`

Текущая ошибка:

command: \"/cygdrive/C/Program Files/1cv8/common/1cestart.exe\"
./1c.sh: строка 68: \"/cygdrive/C/Program: No such file or directory

Хотел бы узнать тонкости запуска приложений с пробелом в пути.



Последнее исправление: dark-initr0 (всего исправлений: 1)

`$command`

Что это за уродство? Ты знаешь смысл обратных апострофов? Они тут не нужны. Если в переменной $exe1c есть путь к экзешнику с проблеом, то так и пиши его с кавычками:

"$exe1c"

Режим «показывать все команды такстом перед тем, как запустить» включается командой set -x (выключить set +x).

legolegs ★★★★★
()
Ответ на: комментарий от legolegs

Насчет апострофов - почитаю. Без них тоже попробовал, но проблема осталась когда добавляется путь к базе.

По поводу «-x» - да, в курсе, но у меня скрипт состоит из 70 строчек, и чтобы сократить вывод отладочных сообщений я сделал просто вывод переменной перед ее запуском.

Итого: если указать просто путь к 1С (даже без экранирования) - то 1С запускается.

Как только добавляю параметр запуска конкретной базы то возникает ошибка что не найден файл:

./1c.sh: строка 68: /cygdrive/C/Program Files/1cv8/common/1cestart.exe  /F C:\Users\user\Documents\Инфобазы\erp_devel: No such file or directory
dark-initr0
() автор топика

Не надо таких адских смесей, под виндой есть павершелл. Cygwin это больше для случаев, когда тебе достаточно того, что в нём есть.

nebularia ★★★
()
Ответ на: комментарий от dark-initr0

Не ну ты конечно экспертно решил гланды удалять, по делу раз уж приходится админить win, то изучай powershell там вполне скриптовать можно

Kolins ★★★★
()
Последнее исправление: Kolins (всего исправлений: 1)
Ответ на: комментарий от dark-initr0

Вижу через libastral, что ты помещаешь и путь к экзешнику и путь к базе в одну строковую переменную и так пытаешься вызвать.

Так не принято.

Что происходит: если ты забираешь переменную в кавычки вот так "$command", то всё содержимое переменной command ЦЕЛИКОМ считается именем экзешника, и конечно, такого экзешника /cygdrive/C/Program Files/1cv8/common/1cestart.exe /F C:\Users\user\Documents\Инфобазы\erp_devel не находится.

Если же ты убираешь кавычки, то bash производит wordsplitting, т.е. бьёт на куски между пробелами и первый кусок /cygdrive/C/Program считаем именем экщзешника, а остальные намеревается передавать ему как аргументы командной строки.

Правильный же способ - сохранить путь к экзешнику и путь к базе в разные переменные и так и запускать:

"$CMD" "$DB"

так все и делают. Иногда ещё добавляют переменную с опциями.

legolegs ★★★★★
()