Подтвердить что ты не робот

Как назначить разрешение на выполнение файла .sh в окнах, которые будут выполняться в Linux

Вот моя проблема,

В Windows я делаю zip файл, в котором есть текстовый .sh файл, который должен быть выполнен в Linux. Пользователь на другом конце открывает zip файл в Linux и пытается выполнить файл .sh, но разрешение на выполнение исчезло. Поэтому пользователь должен сделать это вручную (как описано здесь: добавить разрешение на выполнение.

Как я могу в Windows сделать исполняемый файл .sh и добавить его в zip файл, чтобы при открытии zip файла в linux файл .sh по-прежнему сохраняет свое разрешение на выполнение (так что пользователю не нужно делать это вручную )

4b9b3361

Ответ 1

Насколько я знаю, система разрешений в Linux настроена таким образом, чтобы точно не выполнить то, что вы пытаетесь выполнить.

Я думаю, что самое лучшее, что вы можете сделать, - предоставить вашему пользователю Linux пользовательский unzip one-liner для запуска в командной строке:

unzip zip_name.zip && chmod +x script_name.sh

Если существует несколько сценариев, которым необходимо предоставить разрешение на выполнение, напишите grant_perms.sh следующим образом:

#!/bin/bash
# file: grant_perms.sh

chmod +x script_1.sh
chmod +x script_2.sh
...
chmod +x script_n.sh

(Вы можете поместить скрипты на одну строку для chmod, но я нашел, что отдельные строки легче работать с vim и с командами оболочки script.)

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

unzip zip_name.zip && source grant_perms.sh

Обратите внимание, что, поскольку вы используете source для запуска grant_perms.sh, ему не требуется разрешение на выполнение

Ответ 2

Формат файла ZIP позволяет хранить биты разрешений, но программы Windows обычно игнорируют его. Однако утилита zip на Cygwin сохраняет бит x, как и в Linux. Если вы не хотите использовать Cygwin, вы можете взять исходный код и настроить его так, чтобы все *.sh файлы получили исполняемый бит. Или напишите script, как описано here

Ответ 3

Это возможно, используя утилиты Info-Zip с открытым исходным кодом Zip. Если unzip запускается с параметром -X, он попытается сохранить исходные разрешения. Если исходной файловой системой была NTFS, а пункт назначения - Unix, она будет пытаться перевести от одного к другому. Сейчас у меня нет системы Windows, чтобы протестировать перевод, поэтому вам придется поэкспериментировать с тем, какая группа должна получать разрешения на выполнение. Это будет что-то вроде "Пользователи" или "Любой пользователь"

Ответ 4

Это невозможно. Разрешения для Linux и разрешения Windows не переводятся. Они специфичны для машин. Было бы безопасным ядром, позволяющим устанавливать разрешения на файлы, прежде чем они даже прибудут в целевую систему.