Если файл может быть считан, он может быть скопирован. Можно, однако, мешать файлу быть удаленными или перемещенными, не давая полномочия записи каталогу, где файл находится.
Отредактированный с дополнительной информацией, так как вопрос был исправлен:
Учитывая сценарий Вы теперь добавили к вопросу, Вы могли сделать это:
guiuser
guiuser
guiuser
прочитал разрешениеguiuser
chmod u+s /GUI/program/GUI.exe
)Когда Ваши пользователи запустят программу, та программа будет иметь права доступа guiuser
, таким образом, программа сможет считать файлы даже при том, что у обычного пользователя нет разрешения.
Как написано на странице проекта wget, в wget версии 1.16.1 были добавлены защищенные протоколы TLSv1 _ 1
и TLSv1 _ 2
. Ваш wget 1.15 его не поддерживает.
Ресурсы:
-121--69314-Вместо записи фрагментов кода для каждой оболочки следует просто написать переносной код, который может интерпретироваться большинством оболочек. Необходимо ознакомиться с языком команд POSIX Shell . Это стандарт, как оболочка (которая чтит POSIX) должна интерпретировать код.
Многие оболочки, например bash
, могут быть настроены так, чтобы вести себя как оболочка POSIX. Каждый снаряд имеет свои выигранные особенности и специфические нотации. Авиодировать их полностью в портативных скриптах.
Я предполагаю, что вы хотите сделать это для портативности. Приведенные выше ответы дают вам подсказку. Если предположить, что оболочка Борна (sh) является наименьшим общим знаменателем и доступна 'везде' (Linux, Solaris, Unix, AIX и т. д.), то в начале сценария можно поставить # !/bin/sh
и написать весь сценарий, используя только возможности sh.
(Я думаю, что в Linux sh является просто псевдонимом для bash, потому что bash является супернабором оболочки Борна, но неважно, он все равно должен работать.)
Небольшое уточнение состоит в том, чтобы предположить, что sh
всегда есть, но вам может понадобиться дополнительная мощность и удобство некоторых из более продвинутых оболочек.
чтобы вы могли написать версию сценария для каждой поддерживаемой вами оболочки, например, script.bash, script.zsh, script.ksh, script.csh и т.д., каждая из которых начинается с собственной строки shebang, а затем в файле script.sh вы скажете что-то вроде:
#!/bin/sh
if [[ -e /bin/ksh ]] ; then
./script.ksh
exit
elif [[ -e /bin/csh ]] ; then
./script.csh
exit
fi
и т.д.
Еще одно предложение - изучить исходный код цепочки инструментов auto-tools. Те вещи, которые выполняются при выполнении ./configure; изготовить; произвести установку. GNU сделали много умных вещей, чтобы гарантировать, что их скрипты работают во всех средах.
Вместо того, чтобы писать фрагменты кода для каждой оболочки, вам следует просто написать переносимый код, который может интерпретироваться большинством оболочек. Вам следует обратиться к POSIX Shell Command Language . Это стандарт того, как оболочка (которая поддерживает POSIX) должна интерпретировать код.
Многие оболочки, например bash
, можно настроить так, чтобы они работали как оболочка POSIX. У каждой оболочки есть свои лучшие особенности и особые обозначения. Авиод их полностью в портативных скриптах.
Для csh-подобных против Bourne-подобных, вы могли бы сделать:
start=:#||:<<"goto end="
echo "(t)csh code here"
if { bindkey >& /dev/null } then
echo tcsh
endif
goto end=
echo Bourne-like code here
if [ -n "$BASH_VERSION" ]; then
echo bash
fi
end=:
Объяснено:
start=:
будет рассматриваться как объявление метки в csh
, и присвоение переменной в sh
, так что две безобидные операции. start=:#
, этот #
рассматривается как комментарий лидера csh
, но не в sh
, поскольку это не отдельная лексема. Поэтому то, что после этого, комментируется для csh
, но не для sh
. sh
имеет статус успешного завершения (если присваивание не включает подстановку команд), поэтому команда справа от оператора ||
не будет выполнена. :<<"goto end="...goto end
не выполняется, а разбирается и игнорируется (тот факт, что "goto end"
заключен в кавычки, предотвращает различные расширения внутри данного документа). Однако, примечание: в оболочке Bourne (и только в оболочке Bourne) временный файл все еще создается. goto end=
игнорируется Bourne-подобной оболочкой и выполняется csh
. goto end=
заставляет csh
игнорировать часть между этим и end=:
(безобидное присвоение переменной в Bourne-подобных оболочках). Чем больше поддержки оболочки вы добавляете, тем сложнее это становится. Особенно для fish
это довольно сложно, поскольку он проверяет синтаксис всего сценария в целом, а не тех его частей, которые не запускаются.
См. также:
параллельный
вызов shell)