Хорошо известно, что bash выполнит "скрипт" с интерпретатором, отличным от bash, в строке she-bang (например, как «#!»). / Бен / кошка ")

хотя то, что, кажется, не работает (по крайней мере, с первой попытки), включает в себя такие интерпретируемые пользователем скрипты в надлежащие скрипты bash, используя команды source или dot, то есть что-то вроде

#! /bin/bash; echo these are the terms; source terms.cat

с помощью terms.cat интерпретатора #! /bin/cat

Кто-нибудь нашел способ сделать что-то подобное (или уверен, что это не может быть сделано?)

(пожалуйста, не отвечайте мне, как решить надуманный пример; я знаю, как; моя реальная ситуация намного сложнее; пример просто передает идею)

1 ответ1

2

source команда явно предназначена для загрузки сценариев, как если бы они были частью основного сценария. Думайте об этом как C #include или PHP require() .

Это означает, что содержимое этого файла также должно быть допустимым сценарием bash. Баш не будет заботиться о #! заголовки и не просят ядро заботиться о них; он просто прочтет файл и пропустит те из них, как если бы они были обычными комментариями.

Другими словами, если вы хотите #! Чтобы быть уверенным, ваш основной скрипт должен будет напрямую выполнить этот файл как команду.

(Или попросите perl выполнить его. Perl пытается быть полезным и порождает правильного переводчика для вас.)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .