jsbundling-rails
jsbundling-rails copied to clipboard
Replace `command` with `which` in tool_exists
command
is a built-in shell command in linux (at least in debian , ubuntu and similars)
If executed in ruby system it return nil (inspecting: 127 command not found)
This not happens with which
, that is a system command.
I 've done a PR for fast, but if you prefer I can open a simple issue. 🙂 TY
It's fine for it to return nil when the command is not found. It's falsy.
Sorry but It seems not ok to me If 'command' is not found returns falsy, but in this situation routine is unable to find 'tool'
I don't understand the concern you're raising:
irb(main):001> system "command -v yarn > /dev/null"
=> true
irb(main):002> system "command -v yorn > /dev/null"
=> false
'command' is a shell (sh) command If you execute irb not in a shell but in windows CMD or kind of different terminals, the result will be always falsy, for error 'command not found' referred to 'command' itself
Instead 'which' is an external command, often installed at system level (is an executable in PATH) in both Linux, Windows etc
Ah, I see. So you're hitting this problem running it in a Windows shell? Does the rest of everything work otherwise? We typically don't spend much/any time on compatibility with Windows shell, since WSL offers a much easier road to compatibility. Or is there another shell where this is manifesting itself?
Also in linux
See these screens
WSL2 - Ubuntu
Real linux - Debian
Both have same problem
My opinion: IRB does not spawn on the sh shell who launched it (it's a different process? standalone executable? don't know),
> /dev/null
part is kind of required for system
to run it as a shell command:
>> system "command -v yarn > /dev/null"
=> true
as opposed to trying to find a file to execute:
>> system "command -v yarn", exception: true
(irb):1:in `system': No such file or directory - command (Errno::ENOENT)
- command_line if it is a string, and if it begins with a shell reserved word or special built-in, or if it contains one or more meta characters.
- exe_path otherwise.
https://rubyapi.org/3.3/o/kernel#method-i-system
I think command -v
should stay:
https://unix.stackexchange.com/questions/85249/why-not-use-which-what-to-use-then