なぜ `env`は私の実行可能ファイルを見つけることができないのですか?

なぜ `env`は私の実行可能ファイルを見つけることができないのですか?

私はshebangと/usr/bin/envformを使用してカスタム解釈に従ってスクリプトを実行しようとしています。私のファイルは次のとおりです。

$ cat test.rb 
#!/usr/bin/env winruby

print "Input someting: "
puts "Got: #{gets}"
sleep(100)

ただし、以下を実行すると失敗します。

$ ./test.rb 
/usr/bin/env: ‘winruby’: No such file or directory

なぜかわかりません。

tv185035@WCZTV185035-001 ~
$ winruby --version
ruby 2.5.1p57 (2018-03-29 revision 63029) [x64-mingw32]

tv185035@WCZTV185035-001 ~
$ env winruby --version
env: ‘winruby’: No such file or directory

tv185035@WCZTV185035-001 ~
$ which winruby
/home/tv185035/bin/winruby

Existswinrubyはパスにあり、実行可能です。しかし、env見つかりません。私は見ましたが、man env私に役立つことを教えてくれませんでした。

編集する:

$ cat ~/bin/winruby 
#!/usr/bin/bash

winpty /cygdrive/g/WS/progs/Ruby25-x64/bin/ruby.exe "$@"

答え1

別の考えられる解決策:

envがパスを正しくチェックできないため、PATH変数が "~"を使用してパスを指定していないことを確認してください。

たとえば、次のような場合

export PATH="$PATH:~/bin"

それに変える

export PATH="$PATH:$HOME/bin"

答え2

出力される場合

echo 1l|ed test.rb

君の前に\r$一つあることで終わる<carriage return><line-feed>

Unixでは改行で終わるので、「代わりに」envを探してください。winruby\rwinruby

Unix環境で使用するviか、edスクリプトを編集してnano行末から '\ r'を削除してください。

編集する:

PATHが設定されているがエクスポートに設定されていない場合でも、同じ結果を生成できます。

# PATH is set but not exported
jo@hostname:~/tmp$ winruby --version
running winruby --version
jo@hostname:~/tmp$ env winruby --version
env: winruby: No such file or directory

# print variables starting with PATH
jo@hostname:~/tmp$ set |grep -e ^PATH
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/home/jo/tmp/bin

# print exported variables starting with PATH
jo@hostname:~/tmp$ env | grep -e ^PATH

# Oops ! nothing, so exporting PATH
jo@hostname:~/tmp$ export PATH
jo@hostname:~/tmp$ env | grep -e ^PATH
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/home/jo/tmp/bin

# Final check
jo@hostname:~/tmp$ env winruby --version
running winruby --version

関連情報