Как авто исходный сценарий оболочки?
Как заставить сценарий оболочки выполнять свои команды в качестве исходных команд без использования выражения «source scriptname.sh» для запуска скрипта? В основном я хочу напечатать ./scriptname.sh и его команды действовать так, как если бы источник использовался для выполнения shell-скрипта.
- Установите Windows 7 на второй жесткий диск после Ubuntu 12.04 ... с UEFI
- Как сохранить историю оболочки из emacs и использовать ее в терминале?
- convert_tz возвращает null
- Bugzilla, нет логина для просмотра ошибок
- VirtualBox Ubuntu VM не выполняет автоматическую синхронизацию времени с хостом даже с установленными гостевыми дополнениями
- Установить sbt на ubuntu
- Как переключить PHP 5.5 вместо PHP 5.4 в Bitnami
- Импортируйте закладки Google Chrome из Windows в Mozilla Firefox в Ubuntu
Ни одна из оболочек 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
для его выполнения.