[解決済み] Rubyからシェルコマンドを呼び出す方法
質問
Rubyのプログラムの中からシェルコマンドを呼び出すにはどうしたらいいですか?また、これらのコマンドの出力を Ruby に戻すにはどうしたらよいでしょうか。
どのように解決するのですか?
この説明は、コメント付きの ルビースクリプト 私の友人からの情報です。もし、このスクリプトを改良したい場合は、リンク先で自由に更新してください。
まず、Rubyがシェルを呼び出す場合、通常は
/bin/sh
,
ではなく
Bash Bashの構文にはサポートされていないものがあります
/bin/sh
を、すべてのシステムで使用できます。
シェルスクリプトを実行する方法を紹介します。
cmd = "echo 'hi'" # Sample string that can be used
-
Kernel#`
一般にバックティックと呼ばれる`cmd`
これは、Bash、PHP、Perlなど多くの言語と同じです。
シェルコマンドの結果(=標準出力)を返します。
Docs http://ruby-doc.org/core/Kernel.html#method-i-60
value = `echo 'hi'` value = `#{cmd}`
-
組み込みの構文です。
%x( cmd )
に続いて
x
文字はデリミタであり、任意の文字が使用可能である。 デリミタには任意の文字を指定できます。(
,[
,{
または<
, の場合、リテラルはマッチするクロージングデリミタまでの文字で構成されます。 ネストされた区切り文字のペアを考慮する。それ以外の区切り文字に対しては リテラルは、その文字が次に現れるまでの文字から構成されます。 デリミタ文字 文字列の補間#{ ... }
が許される。バックティックと同じように、シェルコマンドの結果(つまり標準出力)を返します。
Docs https://docs.ruby-lang.org/en/master/syntax/literals_rdoc.html#label-Percent+Strings
value = %x( echo 'hi' ) value = %x[ #{cmd} ]
-
Kernel#system
指定されたコマンドをサブシェルで実行します。
戻り値
true
コマンドが見つかり、正常に実行された場合。false
それ以外の場合はDocs http://ruby-doc.org/core/Kernel.html#method-i-system
wasGood = system( "echo 'hi'" ) wasGood = system( cmd )
-
Kernel#exec
与えられた外部コマンドを実行することによって、現在のプロセスを置き換えます。
現在のプロセスを置き換えた後、決して継続しない。
Docs http://ruby-doc.org/core/Kernel.html#method-i-exec
exec( "echo 'hi'" ) exec( cmd ) # Note: this will never be reached because of the line above
ここで、おまけのアドバイスです。
$?
と同じである。
$CHILD_STATUS
を使用すると、最後にシステムで実行されたコマンドのステータスにアクセスすることができます。
system()
または
%x{}
.
その後
exitstatus
と
pid
プロパティを使用します。
$?.exitstatus
もっと読みたい方はこちらをご覧ください。
関連
-
[解決済み] nil から String への暗黙の変換ができないエラー
-
[解決済み] プログラムの実行やシステムコマンドの呼び出しはどのように行うのですか?
-
[解決済み] Bashシェルスクリプトでディレクトリが存在するかどうかを確認するにはどうすればよいですか?
-
[解決済み] scpを使ってリモートからローカルにフォルダをコピーするにはどうしたらいいですか?
-
[解決済み] シェルで、「2>&1」はどういう意味ですか?
-
[解決済み] Bashで文字列をデリミターで分割するには?
-
[解決済み] Rubyのswitch文の書き方
-
[解決済み] Bashでコマンドの出力に変数を設定するにはどうすればよいですか?
-
[解決済み] コマンドラインから .bash_profile を再読み込みする方法は?
-
[解決済み] 整数の合計を1行に1つずつ表示するシェルコマンド?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】未定義のメソッド(NoMethodError)ruby
-
[解決済み] Rubyのメソッド'to_sym'は何をするのですか?
-
[解決済み] ルビーオールウェイズ ラウンドアップ
-
[解決済み] RMagickのインストール。MagickWand.hが見当たりません。
-
[解決済み] Ruby の .reject! と .delete_if の比較
-
[解決済み] あなたが提供した認証メカニズムはサポートされていません。AWS4-HMAC-SHA256を使用してください。
-
[解決済み] Rubyで配列を平坦化するにはどうしたらいいですか?
-
[解決済み] Capybaraを使ったドロップダウンでのオプションの選択方法
-
[解決済み] Ruby の `print` から bash スクリプトを呼び出して echo するにはどうしたらいいですか?
-
[解決済み] 動的な定数割り当て