bashはカスタムインタープリターシェルを「ソース」できますか?


0

bashがshe-bang行で非bashインタープリターを使用して「スクリプト」を実行することはよく知られています(「#!/ bin / cat」など)

動作していないように見えるもの(少なくとも1回目の試行)は、ソースまたはドットコマンドを使用して、適切なbashスクリプトにそのようなカスタム解釈スクリプトを含めています。

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

terms.cat通訳付き#! /bin/cat

誰かが似たようなことをする方法を見つけましたか?

(不自然な例の解決方法については答えないでください。私はその方法を知っています。私の実際の状況はもっと複雑です。例はアイデアを伝えるだけです)

回答:


2

このsourceコマンドは、あたかもそれらがメインスクリプトの一部であるかのように、スクリプトをロードすることを明確に意図しています。C #includeまたはPHP と考えてくださいrequire()

これは、そのファイルの内容も有効なbashスクリプトでなければならないことを意味します。Bashは#!ヘッダーを気にせず、カーネルにヘッダーを気にするように依頼しません。ファイルを直接読み取り、それらを通常のコメントであるかのようにスキップします。

つまり、#!が必要な場合 優先される行は、メインスクリプトがそのファイルをコマンドとして直接実行する必要があります。

(またはperl、実行するように指示します。Perlは役立つように試み、正しいインタープリターを生成します。)


共有してくれてありがとう。ただし、bashは1行を「評価」しますが、通常のファイルを含める代わりに、別のcmdのbash-valid-syntax出力を書き込む「ソース」バリアントはありません(沸騰するため)これまで)
giKarr

まあ、それがあなたが望むものであるなら、あなたはできるeval "$(command)"source <(command)...またはプログラミングへのアプローチを再考します。
-grawity
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.