Я добавил a ./bin/
папка в моем корневом каталоге.
И я поместил два файла в ./bin
папка, один только с именем файла и другим является filename.ext.
Имена файлов test
и test.sh
:
Когда я работаю только с именем файла, терминал не делает проявления никакого вывода, но когда я попробовал test.sh, сценарий получает выполнение:
Мой Вопрос, могу я запускать скрипт только при помощи имени файла, такого как "тест" на терминале, вместо того, чтобы дать "test.sh".
Из руководства удара:
Если имя не является ни функцией оболочки, ни встроенным, и не содержит наклонных черт, удар ищет каждый элемент ПУТИ для каталога, содержащего исполняемый файл тем именем.
Это означает, что функции и окружают встроенные команды, имеют приоритет сначала, и если нет ни одного - это ищет команду в списке каталогов, которые указаны в PATH
переменная.
То, с чем Вы встретились, test
команда, которая является встроенной командой, совместимой с исходной Оболочкой Bourne в bash
. Эта команда тиха, и используется для простой логики, арифметической оценки и строковой оценки. Это используется в логике и если операторы:
bash-4.3$ test 1 -le 2 && echo "1 is less that or equal to 2"
1 is less that or equal to 2
bash-4.3$ if test 1 -le 2 ; then echo "1 is less than or equal to 2"; fi
1 is less than or equal to 2
Отметьте это test
и [
точно то же:
bash-4.3$ [ 1 -le 2 ] && echo "1 is less that or equal to 2"
1 is less that or equal to 2
bash-4.3$ if [ 1 -le 2 ] ; then echo "1 is less than or equal to 2"; fi
1 is less than or equal to 2
Существует также /usr/bin/test
который является среди стандартных утилит, и существуйте для мобильности и совместимости. Если было нет test
встроенный в Вашей оболочке, это просмотрело бы PATH
переменная, и если /usr/bin/
произошедший, чтобы быть перед Вашим ~/bin
в списке - это работало бы /usr/bin/test
. Вот пример этого:
bash-4.3$ enable -n test
bash-4.3$ PATH="$HOME/bin/:$PATH" test
I am ~/bin/test
Используя enable -n
команда мы выключаем встроенное test
, и выполненный test
временно с измененным PATH
такой мой ~/bin
является первым в списке. Оболочка смотрит на список и находит мой сценарий оболочки ~/bin/test
и выполнил его.
Примечание: не делайте этого! Вышеупомянутый пример для демонстрации только! Это не хороший способ запустить Ваши скрипты и не рекомендуется. Используйте соответствующее именование, никогда не называйте Ваши команды тем же как оболочку созданные-ins или существующие утилиты. Вас предупредили.
Что произошло в Вашем test.sh
случай - то, что там не встроено или вызванные функции test.sh
и поэтому оболочка искала каждый каталог в PATH
список, пока это не нашло Ваш test.sh
файл и выполнил его. Вот почему это работает.
Нет. Это не имеет никакого отношения к расширениям файла, и на самом деле для большинства файлов расширение не важно. Shell заботится о местоположении того, что Вы вводите в командной строке, если это - встроенное или функция или псевдоним, и если файлу, который Вы упоминаете, установили исполняемые полномочия.
Кроме того, это заботится о соответствующем #!
строка (который более официально известен как директива интерпретатора), потому что, если Вам записали сценарий оболочки, говорят для оболочки C, но это не имеет соответствующим #!
строка наверху, и Вы пытаетесь выполнить его с bash
- оболочка попытается выполнить его, но это повредится из-за несовместимого синтаксиса.
В более общем плане Linux и подобные Unix системы главным образом заботятся о магических числах, которые составляют первые несколько байтов в файле, которые определяют тип файла.