Объединить несколько сценариев в "index.html", как мода?
Существует ли стандартный способ в unixesque (sh/bash/zsh) системе выполнить группу сценариев, как если бы группа сценариев была одним сценарием? (Подумайте index.html). Смысл в том, чтобы избежать дополнительных вспомогательных сценариев, которые вы обычно находите, и сохранять небольшие программы самодостаточными и простыми в обслуживании.
Скажем, у меня есть два (жирным шрифтом) рубиновых сценария.
/ бен
/ Бен / foo_master
/ bin / foo_master /main
/ bin / foo_master /helper.rb
Так что теперь, когда я выполняю foo_master
seo @ macbook ~ $foo_master
[/ bin / foo_master / main]: заводите новых друзей, но сохраняйте старых.
[/bin/foo_master/helper.rb]: один - серебро, а другой - золото.
3 ответа
Я выяснил, как это сделать в полустандартной форме жалоб.
Я использовал синтаксис eval в сценариях оболочки для лямбда-вычисления $PATH во время выполнения. Так в моем /etc/.zshrc
$REALPATH = $PATH
$PATH = $REALPATH:`find_paths`
где find_paths - это функция, которая рекурсивно ищет в каталогах $PATH папки (псевдокод ниже)
(foreach путь в $PATH => ls -d - */)
Итак, мы идем из этого:
seo @ macbook $ echo $PATH
/ Bin/:/ USR / бен /
На это автоматически:
seo @ macbook $ echo $PATH
/ Bin/:/ USR / бен /: / bin / foo_master /
Теперь я просто переименую main в "foo_master" и вуаля! Самодостаточный исполняемый файл, смею сказать "приложение".
Если вы пытаетесь сделать это без создания вспомогательного скрипта, типичным способом сделать это будет просто выполнить оба (примечание: я буду использовать : $;
представлять приглашение оболочки):
: $; ./main; ./helper.rb
Теперь, если вы пытаетесь записать вывод обоих в файл, скажем, тогда вы можете сгруппировать их в подоболочку с круглыми скобками и записать вывод подоболочки, как если бы это была одна команда, например так:
: $; (./main; ./helper.rb) > index.html
Это то, что вы после? Мне немного неясно, какова ваша конечная цель. Если вы хотите сделать это с высокой степенью повторяемости, то, возможно, вам захочется создать команду-оболочку... но если вы просто хотите выполнить две команды как одну, вы можете сделать один из двух вышеупомянутых параметров, и он должен работать для большинства случаев. (Тем не менее, не стесняйтесь расширять вопрос, если мне не хватает того, что вы ищете.)
Да, это легко!
#!/bin/bash
/bin/foo_master/main
/bin/foo_master/helper.rb
Сохраните файл как foo_master.sh и введите его в оболочке:
seo@macbook ~ $sudo chmod +x foo_master.sh
Затем запустить тип:
seo@macbook ~ $./foo_master.sh
РЕДАКТИРОВАТЬ:
Причина, по которой файл index.html обслуживается в любом данном каталоге, заключается в том, что HTTP-сервер явно ищет его. (В файлах конфигурации сервера вы можете указать имена файлов, которые нужно искать на сервере, например index.html, т.е. index.php index.htm foo.html и т. Д.). Таким образом, это не волшебство. В какой-то момент "вспомогательный скрипт" явно ищет файлы. Я не думаю, что написание сценария, как описано выше, это шаг, который вы можете пропустить.