выполнение сценария оболочки без неявного вызова sh - PullRequest
25 голосов
/ 08 июня 2010

Мне было интересно, можно ли создать "ссылку" в usr / bin (т.е.), которая ведет к сценарию оболочки.

Но я хочу просто написать

% shellscript

вместо

% sh shellscript.sh

вроде как псевдоним.

Возможно ли это?

Ответы [ 5 ]

47 голосов
/ 08 июня 2010

Создайте первую строку скрипта

#!/bin/sh

Затем сделайте его исполняемым, набрав команду:

chmod +x shellscript.sh

Если вы сейчас поместите скрипт в папку bin,находится в переменной вашей системы PATH , и вы сможете запустить ее напрямую.Чтобы просмотреть папки в вашем пути, введите:

echo $PATH

Я обычно использую /home/[my username]/bin для написанных мной сценариев, чтобы они не мешали другим пользователям в системе.Если я хочу, чтобы они были для всех пользователей, я использую /usr/local/bin, который поставляется пустым в большинстве дистрибутивов.

.sh в конце имени файла скрипта - это всего лишь соглашение, которое поможет вам вспомнить, какогофайла это.Например, он будет работать, если вы переименуете его в shellscript, что удовлетворит ваши требования.

15 голосов
/ 08 июня 2010

Вы можете сделать исполняемый скрипт оболочки (chmod +x shellscript.sh).Затем вы можете сделать ссылку на него из / usr / bin (ln -s shellscript.sh /usr/bin/shellscript).

2 голосов
/ 08 июня 2010

В дополнение к созданию исполняемого скрипта и связыванию его с / usr / bin, как другие предлагали, вы также захотите добавить строку «shebang» в начало скрипта:

#!/bin/sh

# your commands here

Это позволяет вам указать, какой интерпретатор оболочки (bash, bourne shell, c-shell, perl, python ...) следует использовать для выполнения вашего скрипта.

2 голосов
/ 08 июня 2010

Да. Вы можете использовать ln для создания ссылки на shellscript.sh с именем shellscript. Затем вам нужно будет сделать его исполняемым, но после этого (при условии, что /usr/bin находится на вашем пути) вы можете запустить его с shellscript.

0 голосов
/ 16 февраля 2012

Я размышлял над этим вопросом об использовании расширений имен файлов в Unix / MacOSX, и лучший ответ, который я могу дать, - это вставка из моих комментариев по разработке в каком-то коде, который я написал несколько лет назад, для автоматизации всего утомительного процесса обновления скриптов, которые я пишу для включения в/ USR / местные / бен.

I have begun to
change how I develop code for my contributions to
/ usr / local / bin. In the past I would always leave the development
file without an extension and depend on the shebang
#!/usr/bin/env ...) line. The flaw with using this approach
exclusively is it does not allow me to utilize the code colorizing
capabilities I have available for programming languages as deftly
as I might. Also allot of development environments do not
understand shebang and so see the code as plain text. Nor are the
contents of files without file extensions accessible via the MacOSX
QuickLook feature...

Короче говоря, мой код автоматизации (довольно много для публикации здесь) sudo вставляет исполняемую копию программы без расширения в / usr / local / bin, но файл в каталоге разработкисохраняет свое расширение языка сценариев / программ.Обе копии имеют одну и ту же строку Шебанга в верхней части файла.В этом коде автоматизации, конечно же, автоматизировано множество других повторяющихся задач.Но конечная награда - это «накладные расходы», связанные с процессом написания новых «команд» или настройкой существующих / usr / local / bin «команд», теперь требуется несколько нажатий клавиш.

Я остаюсь на Снежном Барсе и остаюсь осторожен со Львом.Так что если на Льве все будет иначе, я прошу прощения за путаницу.Кроме того, если ваша ОС не имеет эквивалента QuickLook, то, что я сказал, может быть утеряно для вас, но я думаю, что любой пользователь Linux / Unix все еще может извлечь выгоду из раскрашивания кода с помощью vim / less (http://www -zeuthen.desy.de/~friebel/unix/less/README).

Пример некоторых из моих автоматических выходных кодов раскраски шаблонов, которые облегчают QuickLooking через код в каталоге разработки:

/usr/bin/highlight --syntax sh --style neon -i "/Users/pcs/Projects  /Shell/Bash/findpdftext/findpdftext.sh" >| "/Users/pcs/Projects/Shell /Bash/findpdftext/findpdftext.sh.html" 

Создание этого шаблонного HTML ничего не стоит мне и красивее в QuickLook, чемman-страницы, которые также генерируются автоматически.Еще один маленький пример автоматизированного вывода, который идет в сценарий в каталоге разработки программы, который будет запущен, когда я буду готов зафиксировать любые изменения в рассматриваемом сценарии для копии 'command' в / usr / local / bin:

##################################### REWIRE findpdftext.sh: 
chmod 777 "/Users/pcs/Projects/Shell/Bash/findpdftext/findpdftext.sh" 
cp -f "findpdftext.sh" "findpdftext" 
sudo ln -f "findpdftext" /usr/local/bin 
cp -f "findpdftext" "/Users/pcs/man/cat1/findpdftext.1" 

############### SYMBOLIC-LINK-NAMES supplied from command-line: 
##### fpdf is a symbolic link to findpdftext 
sudo ln -s -f "/usr/local/bin/findpdftext" "/usr/local/bin/fpdf" 
cp -f "/usr/local/bin/findpdftext" "/Users/pcs/man/cat1/fpdf.1" 

############### SYMBOLIC-LINK-NAMES supplied from command-line: 
##### fpt is a symbolic link to findpdftext 
sudo ln -s -f "/usr/local/bin/findpdftext" "/usr/local/bin/fpt" 
cp -f "/usr/local/bin/findpdftext" "/Users/pcs/man/cat1/fpt.1" 

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

...