ブラウザのサポートを壊さずに実行可能なJavascriptファイルにハッシュバンを追加するにはどうすればよいですか?

ブレック

このようなコードを持つことは可能ですか?

#! /usr/local/bin/node
console.log("Hello world")

ブラウザでも実行できるということですか?

ローカルで実行するスクリプトがあり、ブラウザで実行したいのですが、今はブラウザターゲット用に「再コンパイル」して、ハッシュバン行を削除するだけです。

私はそれを回避する方法を考えることができません。何か案は?

編集:私の使用法は、作業中に現在のファイルを実行し、Web経由で提供できるようにするため、2つのファイルを持たせたくないということです。解決策は、ブラウザ用に2番目のファイルにコンパイルするか、#の代わりに使用する必要があると思います。それはjavascriptでうまく機能します。

ムル

bashのみを使用する場合は、bashの1つの機能(?!)を利用できます。bashは、bashを使用してシバンなしでスクリプトを実行します。他のシェルはそれをOSに任せることがあり、通常は/bin/sh代わりに使用します。例えば:

bash-5.0$ echo 'echo $1 $BASH_VERSION' > foo.sh
bash-5.0$ for sh in sh bash dash ksh zsh; do $sh -c "./foo.sh $sh"; done
sh 3.2.57(1)-release
bash 5.0.7(1)-release
dash 3.2.57(1)-release
ksh
zsh 3.2.57(1)-release

/bin/shここmacOSの古いバージョンのbashへのリンクです。)

したがって、次のようなファイルを作成できます。

///usr/local/bin/node <(tail -n +1 "$0"); exit $?
console.log("Hello world")

これをブラウザまたはJavaScriptを実行する他の手段で実行する場合、最初の行はコメントとして無視する必要があります。

これをbashのスクリプトとして実行する場合、最初の行は///usr/local/bin/node、プロセス置換を使用しtailてファイルの残りの部分をノードにフィードて実行するように指示し、終了します。

bash-5.0$ cat foo.js
///usr/local/bin/node <(tail -n +1 "$0"); exit $?
console.log("Hello world")
bash-5.0$ ./foo.js
Hello world

このトリックはkshでも機能する可能性があります。///パスの先頭に問題ないはず原因-三つ以上の/パスの開始時には、単一のと同等です/

ただし、コメントで示唆されているように、代わりにラッパースクリプトを使用することを強くお勧めします。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ