これが重複するリスクが高いことは承知していますが、ここにある他のどの質問でも、私の問題に対する回答は見つかりませんでした。以下は、私がすでに試したことの要約です。
Rスクリプトファイルがありますfile.r
:
#!/usr/bin/env Rscript
print("Hello World!")
実行可能です(chmod +x file.r
)を使用して、以前は問題なく実行されていました(前回使用したのは約1か月前です)。
$ ./file.r
ただし、今日:
$ ./file.r
/usr/bin/env: 'Rscript\r': No such file or directory
実際には:
$ which Rscript
/usr/bin/Rscript
したがって、私はシバンを次のように変更しました:#!/usr/bin Rscript
、 だが:
$ ./file.r
/usr/bin: bad interpreter: Permission denied
それから私はそれをスーパーユーザーとして実行すると思ったが、:
$ Sudo ./file.r
Sudo: unable to execute ./file.r: Permission denied
周りを読んで、Rを新しくインストールすると問題が解決することがわかったので、Rをアンインストールしてインストールしました。残念ながら、以前に書いたことがまだ当てはまります。ただし、以下は両方のShebangバージョンで機能することに注意してください。
$ Rscript file.r
[1] "Hello World!"
何が悪いのですか?
あ、キャリッジリターン(\ r)の問題です。viエディターを使用している場合は、最初の行に追加されます:set list
表示されます。行末は$、キャリッジリターン文字は^ Mとして表示されます。
#!/usr/bin/env Rscript Makes your script portable than #!/usr/bin/Rscript
ところで、\ rをviに挿入するには、insert(i)/ Append(a)モードに入り、ctrl + vと入力してからctrl + mと入力します。
実行可能ファイルを直接指定する場合は、シバンの後に完全なパスが必要です(スペースなし)。
#!/usr/bin/Rscript
Raviが指摘したように、この修正が機能しない場合、解決策は改行を削除して再度挿入することだけです。
私はenv
回避策のファンではありません。これは、物事をよりポータブルにするためのものです。これは、行をより混乱させ、ほとんどの人は、それが実際に別のプログラム(つまりenv
)を呼び出していることに気付かないからです。変更されたシェルでコードを実行します。その詳細情報 ここ 。