• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:bashで変数にパイプを入れ、コマンドとして使う?)

bashで変数にパイプを入れ、コマンドとして使う方法

このQ&Aのポイント
  • bashで変数にパイプを入れ、コマンドとして使う方法について教えてください。
  • Linux環境で、bashを使ってモニタリングスクリプトを作成しています。引数で実行するモニタリングコマンドを変えるため、パイプが含まれる変数を実行する方法を知りたいです。
  • bashシェルでパイプを含む変数を実行する場合、シングルクォーテーションで囲んでもパイプとして認識されません。どのように回避できるか教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • entree
  • ベストアンサー率55% (405/735)
回答No.2

while :; do (set -x; eval "${RUNCMD}"; sleep ${INTERVAL}); done evalは引数の内容をコマンドとみなして実行する組み込みコマンドです。 evalが実行された時点でダブルクォーテーションで括られたシェル変数が展開されるため、 RUNCMD='ps -ef | grep pty'なら、実際に実行されるコマンドは ps -ef | grep pty となり、期待通りの動作をするのではないでしょうか? $ set -x $ RUNCMD='ps -ef | grep pty' + RUNCMD='ps -ef | grep pty' $ eval "$RUNCMD" + eval 'ps -ef | grep pty' ++ grep pty ++ ps -ef test   32706 32559 0 10:12 pts/2  00:00:00 grep pty

stosh666
質問者

お礼

ありがとうございます。 evalはシェル組み込みコマンドってのもいいですね。 こちらの提案を採用させていただきます。

その他の回答 (1)

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

このスクリプトなら、 while :; do (set -x; sh -c ${RUNCMD}; sleep ${INTERVAL}); done と、sh(またはbash)のコマンドとして実行させればよさそう

stosh666
質問者

お礼

ありがとうございます。shコマンドの引数にそういうのがあるのを完全に忘れてました。

関連するQ&A