Самое большое, что я нашел, это
\rm file
, это запустит исходную версию unalias и сохранит псевдоним.
Мы также можем использовать встроенную оболочку command например,
command rm file
, но я, безусловно, наслаждаюсь меньшей детализацией в первом
Ключевым моментом является следующее: расширения не имеют отношения к какой-либо Unix-подобной системной системе. Имя файла - это просто имя и не влияет на возможность запуска сценария или скомпилированного исполняемого файла. Программист может добавить расширение .sh, чтобы указать, что файл является сценарием оболочки или .py для сценария python, но в отличие от Windows любой unix не заботится об именах, он заботится о разрешениях.
[d2 ] Важно то, что исполняемый файл предоставлен файлу. Вы можете проверить с помощьюls -l /path/to/file
Для запуска сценария обычно существует несколько способов.
Если ваш текущий каталог совпадает с сценарием , а сценарий имеет исполняемые разрешения, вы можете запустить его так ./my_script_name. [F10] означает текущий каталог. Если ваш текущий каталог отличается, а скрипт имеет исполняемые разрешения, вы можете запустить его, указав полный путь: /home/user/bin/my_script_name(Два вышеуказанных метода полагаются на установленный набор разрешений, независимо от того, является ли файл частью $PATH не имеет значения. Наличие строки #! также имеет значение, без нее скрипт будет выполняться текущей оболочкой, которую вы открыли. Если у меня есть csh скрипт без этой строки и попробуйте запустить его в bash с ./my_script.csh, он не сработает)
Если ваш текущий каталог совпадает с сценарием, а скрипт имеет исполняемые разрешения, вы можете запустить его так ./my_script_name. [F10] означает текущий каталог. Задание интерпретатора как команды и скрипта в качестве аргумента. Таким образом, скрипт будет служить входным файлом для интерпретатора. Если ваш текущий каталог отличается, а сценарий имеет исполняемые разрешения, вы можете запустить его, указав полный путь: /home/user/bin/my_script_nameПример # 1, работа с интерпретатором, разрешения exec
$-> ls -l abc.py
-rw-rw-r-- 1 xieerqi xieerqi 44 Apr 27 22:39 abc.py
$-> python abc.py
a
b
c
Пример # 2, работающий с установленным набором разрешений ./, набор строк shebang.
$-> cat abc.py
#!/usr/bin/env python
for letter in 'a' 'b' 'c' :
print letter
$-> ls -l abc.py
-rwxrwxr-x 1 xieerqi xieerqi 66 Apr 27 23:02 abc.py*
$-> ./abc.py
a
b
c
Пример №3, работающий без shebang line set (fail, потому что bash не может читать скрипты python, ни одна строка shebang не принимает текущую оболочку в качестве интерпретатора)
$-> cat abc.py
for letter in 'a' 'b' 'c' :
print letter
$-> ./abc.py
./abc.py: 2: ./abc.py: Syntax error: word unexpected (expecting "do")
Пример # 4, запущенный скрипт, который имеет исполняемые разрешения, устанавливает папку формы, которая является частью из $PATH переменной
# /home/xieerqi/bin is part of my path variable
$-> echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/opt/microchip/xc16/v1.25/bin:/opt/microchip/xc32/v1.40/bin:/opt/microchip/xc8/v1.35/bin:/home/xieerqi/bin:/home/xieerqi/bin/sh
$-> # current directory is /home/xieerqi
$-> pwd
/home/xieerqi
$-> # move the file to ~/bin
$-> mv ~/abc.py ~/bin/abc.py
$-> # now I can run it just by calling the name
$-> abc.py
/home/xieerqi/bin/abc.py: 2: /home/xieerqi/bin/abc.py: Syntax error: word unexpected (expecting "do")
$-> # Syntax error because again, no interpreter specified.
$-> # must add #!/usr/bin/env python
$-> vi /home/xieerqi/bin/abc.py
$-> # after adding the line with vi text editor, we can run
$-> abc.py
a
b
c
Пример # 5, удаляя расширение, по-прежнему выполняется, потому что расширения не имеют значения, но он имеет разрешения и является частью $PATH:
$-> mv ~/bin/abc.py ~/bin/abc
$-> abc
a
b
c
Хорошие объяснения здесь уже. Я просто хотел добавить, что в идеале вы не должны использовать расширения файлов для исполняемых файлов.
Обычно вам нужно выполнить что-то относительно простое, и вы начинаете с небольшого сценария оболочки. Со временем вы начинаете добавлять к своему скрипту все больше и больше функциональности, пока не придет какое-то время, когда оно станет незаметным, или вам потребуется некоторая функциональность, которую вы не можете легко выполнить с помощью сценария оболочки и подумайте о переписывании этого сценария оболочки на другом языке (python , perl, ...?).
Переписывание с нуля обычно считается ошибкой, но для скриптов это может иметь смысл, потому что обычно они не такие большие или имеют много функциональности. Но давайте предположим, что можно переписывать с нуля на каком-то другом языке, сохраняя функциональность и params / flags исходного сценария оболочки.
Пользователи этого скрипта не должны знать об этом изменении языка , они будут продолжать выполнять ту же команду, и она будет продолжать работать.
Если ваш скрипт был назван do-something.sh, он может продолжать быть do-something.sh, но теперь он написан на python (например) и поэтому ваш первоначальный намек теперь полностью вводит в заблуждение.
Чтобы запускать файлы без расширения, вам обычно не нужно много делать, просто убедитесь, что у вас есть (в случае скриптов bash) правильная строка shebang в самой первой строке:
#!/bin/bash
then вам также необходимо сделать файл исполняемым для системы с помощью
chmod 755 yourfilename
Это то же самое, что и при использовании chmod +x yourfilename номера легко объясняются.
Это число тройка добавлены восьмеричные, первое число - для пользователя, второе - для группы, а третье - для других, более того, что вы можете найти здесь.
И если вы находитесь в том же каталоге, script не забудьте использовать ./ следующим образом:
./yourfilename
. Суффикс .sh может действительно мешать, потому что тогда для его запуска вам нужно ввести myscript.sh вместо просто myscript, который не будет работать. Лучше просто называть его «myscript» без суффикса .sh, и быстрое использование команды «file» скажет вам, является ли это двоичным исполняемым файлом (формат ELF на linux) или скриптом оболочки или любым другим типом скрипта.
QDOS (быстрая и грязная операционная система, позже переименованная в «DOS» IBM после того, как mirosoft пиратствовала и незаконно продала ее им) и другие дешевые риппоты CP / M, включая окна, смешивают все это потому что в этих системах нет таких прав, как разрешения на выполнение для файлов. Это привело к бесчисленным нарушениям безопасности за последние 30-40 лет. На самом деле всего несколько минут назад у меня появилось несколько нежелательных писем с замаскированным zip-файлом, переименованным в MYPICTURE.JPG.zip:)