Làm cách nào để gọi các lệnh shell từ bên trong chương trình Rails? Làm cách nào để lấy lại kết quả từ các lệnh này vào Ruby?
Làm cách nào chúng ta có thể sử dụng các lệnh bên ngoài từ ruby. Bài viết này sẽ hướng dẫn các cách để thực thi các lệnh (shell/ Linux Commands) nhé.
Sử dụng system method
Syntax: system("cmd")
Ex:
- Hệ thống có thể trả về 3 giá trị có thể có:
- True nếu lệnh hoạt động
- False nếu lệnh trả về lỗi
- Nil nếu không tìm thấy lệnh
Kernel#` VÀ %X
NếU muốn nhận đầu ra từ lệnh bạn đang chạy thì có thể sử dụng phương thức %x hoặc Kernel#`.
Syntax:
`cmd`
%x( cmd )
Ex:
exec
Process hiện tại được thay thế và không bao giờ tiếp tục. Điều này có nghĩa là chương trình Rails của bạn sẽ kết thúc.
Syntax: exec "cmd"
Ex:
Fork + Exec
Sử dụng exec thì Process hiện tại sẽ được thay thế. Chúng ta không muốn điều này và có thể lấy được kết quả thì phải làm thế nào, với sự kệt hợp với Fork thì chúng ta đã có điều mình mong muốn.
Fork tạo một bản sao của process hiện tại của bạn (ứng dụng Ruby)
Lưu ý: Fork không sử dụng được trên windows nhé
Syntax:fork { exec("cmd") }
Ex:
Hy vọng với bài viết này mọi người có thể thao tác được với các system command. Hãy cẩn thận khi sử dụng những lệnh này vì đó là lệnh system sẽ có nguy cơ về security. Đầu vào cần phải validate.
Happy coding!!
references
https://stackoverflow.com/questions/2232/how-to-call-shell-commands-from-ruby
Nguồn: viblo.asia