Run System Commands From Rails

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à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ó:
  1. True nếu lệnh hoạt động
  2. False nếu lệnh trả về lỗi
  3. 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

https://www.rubyguides.com/2018/12/ruby-system/

Nguồn: viblo.asia

Bài viết liên quan

Thay đổi Package Name của Android Studio dể dàng với plugin APR

Nếu bạn đang gặp khó khăn hoặc bế tắc trong việc thay đổi package name trong And

Lỗi không Update Meta_Value Khi thay thế hình ảnh cũ bằng hình ảnh mới trong WordPress

Mã dưới đây hoạt động tốt có 1 lỗi không update được postmeta ” meta_key=

Bài 1 – React Native DevOps các khái niệm và các cài đặt căn bản

Hướng dẫn setup jenkins agent để bắt đầu build mobile bằng jenkins cho devloper an t

Chuyển đổi từ monolith sang microservices qua ví dụ

1. Why microservices? Microservices là kiến trúc hệ thống phần mềm hướng dịch vụ,