Объединить несколько сценариев в "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 и т. Д.). Таким образом, это не волшебство. В какой-то момент "вспомогательный скрипт" явно ищет файлы. Я не думаю, что написание сценария, как описано выше, это шаг, который вы можете пропустить.

Другие вопросы по тегам