このようなコードを持つことは可能ですか?
#! /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]
コメントを追加