Как авто исходный сценарий оболочки?

Как заставить сценарий оболочки выполнять свои команды в качестве исходных команд без использования выражения «source scriptname.sh» для запуска скрипта? В основном я хочу напечатать ./scriptname.sh и его команды действовать так, как если бы источник использовался для выполнения shell-скрипта.

Ни одна из оболочек Unix не позволяет вам пометить сценарий как тот, который всегда должен быть получен так, как вы надеетесь. То, что я сделал бы, это создать alias или процедуру, чтобы сделать то, что вы хотите, и поместить в мой сценарий запуска. Например, в tcsh:

 alias scriptname source \!\! 

В bash вы можете написать его как процедуру:

 scriptname( ) { source scriptname.sh $*; } 

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

Добавьте в свой сценарий запуска bash :

 shopt -s extdebug function auto_source_names { local CMD=$BASH_COMMAND if [[ -f "$CMD" ]] && [[ ! -x "$CMD" ]] ; then source "$CMD" return 1 else return 0 fi } trap 'auto_source_names' DEBUG 

Это вызывает вызов функции для каждой выполняемой команды. Если это имя файла, который не является исполняемым (иначе мы также заблокировали бы законные ./foo.sh вызовы), он будет создан и никакая команда не будет выполнена. Помните о файлах с именем ls или rm в том же каталоге. Вы можете добавить дополнительные меры безопасности, например, потребовать расширение file .sh или file сообщающий вам, что это текстовый файл.


Пример:

Создать foo.sh :

 FOO=bar 

Затем:

 $ echo $FOO $ foo.sh $ echo $FOO bar 

Первая строка должна содержать путь к интерпретатору:
#! /bin/bash

Затем сделайте исполняемый файл сценария:
chmod +x scriptname.sh

Теперь вы можете запустить ./scriptname.sh для его выполнения.

  • Как перенаправить определенный трафик через OpenVPN?
  • Композиция Юникода в Sublime Text
  • Как лучше всего клонировать запущенную систему на новый жесткий диск с помощью rsync?
  • Как отключить цвета EMACS - Prelude? (Терминал)
  • Почему мой crontab не работает
  • Может только ssh в Ubuntu 12.04 alpha machine при входе в консоль
  • Bugzilla, нет логина для просмотра ошибок
  • Давайте будем гением компьютера.