2016-03-02 4 views
3

Я хочу включить исполняемый файл в раздел cabal data-files, чтобы выполнить его как подпроцесс в моей программе Haskell.Каббал: исполняемые файлы данных

Файл там, getDataFileName работает для него, но ему не хватает исполняемого бита, и поэтому попытка его запуска с System.Process.createProcess сбой permission denied.

Есть ли способ для кэша сохранить разрешение на выполнение файла? Есть ли еще один чистый способ решить эту проблему?

+2

Возможно, вам придется решить проблему с помощью настраиваемого файла 'Setup.hs' и крюка после установки. Хотя в этом случае я, вероятно, просто изменил бы ваш код, чтобы установить исполняемый бит, прежде чем вызывать 'createProcess', так как пользовательские файлы' Setup.hs' могут быть PITA –

+0

@MichaelSnoyman: Но я думаю, что мой код не обязательно имеют разрешения на установку исполняемого бита, если он установлен в системных каталогах и выполнен пользователем – yairchu

+0

Вы правы. В этом случае вам может потребоваться использовать параметр Setup.hs или прибегнуть к уродливым трюкам, таким как копирование файла во временное место, а затем установка исполняемого бита. –

ответ

3

Как показано в некоторых discussion на междусобойчик пластырей, ток (underdocumented) состояние игры является то, что следует использовать как копию и установочный крюк, так как один или другой будут выполнены.

Редактировать: После некоторого копания есть old ticket on libexec support в кабале, что было бы очень хорошим решением, если бы оно было реализовано.

+0

Что касается второго решения - @MichaelSnoyman также предложил это выше, но мы пришли к выводу, что он не обязательно будет работать, поскольку приложение может запускаться пользователем без прав на изменение файлов данных, установленных глобально. – yairchu

+0

Я отредактировал ваш ответ, чтобы удалить проблемное второе решение, чтобы принять первый в качестве ответа. – yairchu

Смежные вопросы