Почему несколько снарядов?
Похоже, у вас есть одна копия dash
(минимальная реализация /bin/sh
- быстрая для запуска с несколькими наворотами) и одна копия bash
(гораздо большая оболочка с большим количеством расширений, взятых из ksh).bash
отключает некоторые своих дополнительных функций при вызове под именем sh
, но не все из них.
Одна из функций "bash" добавляет к базовой линии POSIX sh - поисктекущий каталог для файлов, поставляемых с помощью команд .
или source
, вместо поиска только в PATH
, как требует спецификация POSIX sh.
Почему они отличаются?Кто прав?
Соответствующий стандарт указан по https://pubs.opengroup.org/onlinepubs/009695399/utilities/dot.html;, см., В частности, первый абзац раздела RATIONALE:
Некоторые старые реализации искали файл в текущем каталоге, даже если значение PATH не разрешено.Это поведение было опущено в этом томе IEEE Std 1003.1-2001 из-за опасений по поводу появления уязвимости для троянских коней, которую пользователь может пытаться избежать, оставляя точку вне PATH.
Поиск старых оболочек.
в дополнение к каталогам в PATH
.Однако по соображениям безопасности спецификация POSIX sh не требует такого поведения;пользователь, который не помещает .
в PATH, по-видимому, хочет иметь возможность cd
в каталогах, содержимым которых он не управляет или которым он не доверяет, не беспокоясь о типосквоттинге или других атаках.
Предполагается, чточто каталог, содержащий myscript.sh
, отсутствует в PATH
, оболочка, которая сообщает «файл не найден», является более строгой, чем другая.