我在 Linux 上使用 Ruby。我想測驗 Linux 系統上是否存在命令。
我想沒有找回命令的輸出是我測驗了。
我也不想取回由于 shell 無法找到命令而導致的任何輸出。
我想避免在發送到 shell 的命令中使用 shell 重定向。所以像 system("foo > /dev/null") 這樣的東西是不合適的。
如果有辦法從 Ruby 進行重定向,我可以使用重定向。
uj5u.com熱心網友回復:
最簡單的事情就是使用system. 假設您正在尋找ls.
irb(main):005:0> system("which ls")
/bin/ls
=> true
如果這不在桌面上,您可以查看ENV["PATH"]您正在尋找的可執行檔案的目錄。ENV["PATH"].split(":")會給你一個目錄名稱陣列來檢查所需的命令。如果您找到一個名稱正確的檔案,您可能需要確保它是可執行檔案。
uj5u.com熱心網友回復:
我想避免在發送到 shell 的命令中使用 shell 重定向。所以像 system("foo > /dev/null") 這樣的東西是不合適的。如果有辦法從 Ruby 進行重定向,我可以使用重定向。
system("exec which cmd", out: "/dev/null")
puts "Command is available." if ($?).success?
這exec是為了明確避免在 shell 中不必要的分叉。
type -P可以使用旁注代替which,但它依賴于 Bash,如果將腳本移植到具有不同默認 shell 的環境中,可能會產生令人驚訝的效果。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/405229.html
標籤:
上一篇:Ruby從二維到一維陣列
