왜 `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

Exists winruby는 경로에 있고 실행 가능합니다. 하지만 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>

유닉스에서는 줄 바꿈으로 끝나므로 ' ' 대신 ' ' 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

관련 정보