file
コマンドはファイルタイプを示しますが、ファイルがテキストの場合は「ASCIIテキスト」と表示されます。ただし、Rubyスクリプト、Pythonスクリプト、C++ファイルなどのテキストの種類を調べたいと思います。Rubyを使用してこれを行いたいと思います。
2 に答える
確実に行うことはできません。
ただし、最初の(ハッシュバン) 行のインタープリターの名前を見れば、かなり確実です。(例: #!/usr/bin/python
、#!/usr/bin/env ruby
など)
ただし、一般に、確実に行うことはできません。たとえば、次のプログラムを考えてみましょう。
print "Hello, World!"
パイソンですか?またはルビー?またはパール?-- これらすべての言語で有効なプログラムです。
確実に行うことはできませんが、おそらく最も近い方法は、プログラムが特定の言語に対して構文的に正しいかどうかを確認することです。これにより誤検知が発生することに注意してください。@maerics の例はprint "Hello, World!"
、単純な空のファイルの場合と同様に 1 つです (おそらく、すべての構文チェッカーが問題なくパスします)。1 つの構文チェッカーだけが問題ないと判断した場合にのみ推測することで、これを減らすことができます。
指定した言語でのみ構文をチェックする方法は次のとおりです (詳細については、Syntastic Vim プラグインが参考になります)。
C++: (お気に入りのコンパイラに
$CC -x c++ -fsyntax-only myfile
置き換えてください。このコマンドは Clang & GCC と互換性があります。)$CC
ルビー:
ruby -c myfile
パイソン:
python -m py_compile myfile
通常、このコマンドの終了コードを確認するだけで済みます。Ruby では、実行するコマンドを渡してsystem
戻り値が true かどうかを確認することで確認できます。