- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:bashで変数にパイプを入れ、コマンドとして使う?)
bashで変数にパイプを入れ、コマンドとして使う方法
このQ&Aのポイント
- bashで変数にパイプを入れ、コマンドとして使う方法について教えてください。
- Linux環境で、bashを使ってモニタリングスクリプトを作成しています。引数で実行するモニタリングコマンドを変えるため、パイプが含まれる変数を実行する方法を知りたいです。
- bashシェルでパイプを含む変数を実行する場合、シングルクォーテーションで囲んでもパイプとして認識されません。どのように回避できるか教えてください。
- みんなの回答 (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
その他の回答 (1)
- kmee
- ベストアンサー率55% (1857/3366)
回答No.1
このスクリプトなら、 while :; do (set -x; sh -c ${RUNCMD}; sleep ${INTERVAL}); done と、sh(またはbash)のコマンドとして実行させればよさそう
質問者
お礼
ありがとうございます。shコマンドの引数にそういうのがあるのを完全に忘れてました。
お礼
ありがとうございます。 evalはシェル組み込みコマンドってのもいいですね。 こちらの提案を採用させていただきます。