Слишком много строк shebang (объявления сценария) - есть ли способ уменьшить их количество?

вы можете использовать htpasswd для защиты своего веб-каталога. следуйте инструкциям ниже.

step1 :

перейдите в свой веб-каталог, который вы хотите защитить, например, / var / www / html / data. здесь создайте любого пользователя, которому нужно разрешить использование следующей команды:

htpasswd -c .htpasswd any_user

где используйте -c для создания первого пользователя, если вы хотите создать больше пользователей, чем использовать только htpasswd .htpasswd second_user

step2 :

создайте файл с именем .htaccess и сделайте такую ​​запись

AuthUserFile /full/path/to/.htpasswd 
AuthGroupFile /dev/null 
AuthName "provide authentication to access page" 
AuthType Basic 
require valid-user

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

12
04.03.2018, 02:50
3 ответа

Несмотря на то, что сейчас ваш проект может состоять исключительно из 50 сценариев Bash, рано или поздно он начнет накапливать сценарии, написанные на других языках, таких как Perl или Python (, благодаря преимуществам этих языков сценариев, которых нет у Bash. ).

Без надлежащей#!-строки в каждом скрипте было бы крайне сложно использовать различные скрипты, не зная также, какой интерпретатор использовать. Неважно, выполняется ли каждый отдельный скрипт из других скриптов , это только переносит трудности с конечных пользователей на разработчиков. Ни одной из этих двух групп людей не нужно знать, на каком языке написан сценарий, чтобы иметь возможность его использовать.

Сценарии оболочки, выполняемые без строки#!-и без явного интерпретатора, выполняются по-разному в зависимости от того, какая оболочка их вызывает (, см., например,. вопрос Какой интерпретатор оболочки запускает скрипт без шебанга? и особенно ответ Стефана ), а это не то, что вам нужно в производственной среде (, вам нужно согласованное поведение и, возможно, даже переносимость ).

Скрипты, выполняемые явным интерпретатором, будут выполняться этим интерпретатором независимо от того, что написано в строке #!-. Это вызовет проблемы в дальнейшем, если вы решите повторно -реализовать, скажем, сценарий Bash на Python или любом другом языке.

Вы должны потратить эти дополнительные нажатия клавиш и всегда добавлять строку#!-к каждому сценарию.


В некоторых средах в каждом скрипте каждого проекта есть шаблонные юридические тексты, состоящие из нескольких -абзацев. Будьте очень счастливы, что только строка#!-кажется «лишней» в вашем проекте.

19
27.01.2020, 19:54

La razón por la que necesita poner #!/bin/bashen la parte superior de cada secuencia de comandos es que lo está ejecutando como un proceso separado.

Cuando ejecuta un script como un nuevo proceso, el sistema operativo ve que es un archivo de texto (en lugar de un ejecutable binario ), y necesita saber qué intérprete ejecutar. Si no lo dice, el sistema operativo solo puede adivinar, usando su configuración predeterminada (que un administrador puede cambiar ). Entonces, la línea #!(además de agregar permisos ejecutables, por supuesto )convierte un archivo de texto simple en un ejecutable que se puede ejecutar directamente, con la confianza de que el sistema operativo sabe qué hacer con él.

Si desea eliminar la línea #!, sus opciones son:

  1. Ejecute el script directamente (como lo está haciendo ahora ), y espero que el intérprete predeterminado coincida con el script -probablemente esté seguro en la mayoría de los sistemas Linux,pero no portátil a otros sistemas (p. Solaris ), y se puede cambiar a cualquier cosa (¡Incluso podría configurarlo para que se ejecute vimen el archivo! ).

  2. Ejecute el script usando bash myscript.sh. Esto funciona bien, pero debe especificar la ruta al script y es complicado.

  3. Fuente el script usando . myscript.sh, que ejecuta el script dentro del proceso de interpretación actual (, es decir, no como un proceso secundario -). Pero es casi seguro que esto requerirá modificaciones en sus scripts y los hará menos modulares/reutilizables.

En los casos 2 y 3, el archivo no necesita (y no debería tener )permisos de ejecución, y darle un sufijo.sh(o.bash)es una buena idea.

Pero ninguna de esas opciones se ve bien para su proyecto, ya que dijo que desea mantener sus scripts modulares (=> independientes y autocontenidos -), por lo que debe mantener su línea #!/bin/bashen la parte superior de los guiones.

En su pregunta, también dijo que está siguiendo la filosofía Unix. Si eso es cierto, entonces debería aprender para qué es realmente la línea #!, ¡y seguir usándola en cada script ejecutable!

1
27.01.2020, 19:54

Вы неправильно понимаете смысл #!. На самом деле это директива для операционной системы запускать эту программу под определенным интерпретатором.

Таким образом, сценарий может быть #!/usr/bin/perl, и результирующая программа может быть запущена как ./myprogramи может использоваться интерпретатор perl. Подобный #!/usr/bin/pythonзаставит программу работать под python.

Таким образом, строка #!/bin/bashговорит ОС запустить эту программу под bash.

Вот пример:

$ echo $0
/bin/ksh

$ cat x
#!/bin/bash

ps -aux | grep $$

$./x
sweh      2148  0.0  0.0   9516  1112 pts/5    S+   07:58   0:00 /bin/bash./x
sweh      2150  0.0  0.0   9048   668 pts/5    S+   07:58   0:00 grep 2148

Таким образом, несмотря на то, что моя оболочка ksh, программа «x» работает под управлением bash из-за строки #!, и это явно видно в листинге процесса.

11
27.01.2020, 19:54

Теги

Похожие вопросы