2016-10-14 5 views
1

を働いていない -bashコマンドで変数を使用して変数に出力を収集することは、私はハードコードされたIPが正常に動作して発行した場合、次のコマンドを持って

ad_request_output="$(/usr/local/nagios/libexec/check_http -w 0.18 -c 0.25 -H <Some private IP> -u 'http://<Some private IP>/fam/postGetAd.php?site_id=76986&partner_id=27de34b6f8b03d81&banner_id=183517&timeout=5000&version=1.5.1&language=jsp&format=wap&phone_headers=REMOTE_ADDR=>166.137.8.134||REMOTE_HOST=>http://localhost||HTTP_USER_AGENT=>Mozilla/5.0')" 

echo $ad_request_outputは、期待される出力を与える -

HTTP OK: HTTP/1.1 200 OK - 217 bytes in 0.055 second response time |time=0.054961s;0.180000;0.250000;0.000000 size=217B;;;0 

private_ip=<Some private IP> 
ad_request_output=$(/usr/local/nagios/libexec/check_http -w 0.18 -c 0.25 -H $private_ip -u 'http://$private_ip/fam/postGetAd.php?site_id=76986&partner_id=27de34b6f8b03d81&banner_id=183517&timeout=5000&version=1.5.1&language=jsp&format=wap&phone_headers=REMOTE_ADDR=>166.137.8.134||REMOTE_HOST=>http://localhost||HTTP_USER_AGENT=>Mozilla/5.0') 

- 変数IPを使用して

しかしには、異なる出力を提供します

にも変数 ${private_ip}を入れて、この形式を試してみました
HTTP WARNING: HTTP/1.1 400 Bad Request - 311 bytes in 0.001 second response time |time=0.000703s;0.180000;0.250000;0.000000 size=311B;;;0 

を、同じ出力を得た - -が与える

ad_request_output=`/usr/local/nagios/libexec/check_http -w 0.18 -c 0.25 -H ${private_ip} -u 'http://${private_ip}/fam/postGetAd.php?site_id=76986&partner_id=27de34b6f8b03d81&banner_id=183517&timeout=5000&version=1.5.1&language=jsp&format=wap&phone_headers=REMOTE_ADDR=>166.137.8.134||REMOTE_HOST=>http://localhost||HTTP_USER_AGENT=>Mozilla/5.0'` 

私はいくつかの関連の質問をチェックしBash - Using variable inside command not workingが、私は間違って何をやっている何の手掛かりを得ませんでした。私は、コマンドで変数を使用するコードを働いてきた

-

php /var/cake_1.2.0.6311-beta/beforeInstall.php ${OUTPUT} 

しかし、出力を変数に収集する必要があるときにそれを行う方法がわかりません。

答えて

1

'内のすべての文字が保存されている:あなたは、二重引用符を使用する必要があります。つまり、$<variable>は展開されません。あなたの特定のケース$private_ip

$ something=value 
$ echo $something 
value 
$ echo "$something" 
value 
$ echo '$something' 
$something 

private_ipの値に展開されない。これを参照してください。 man bashから関連セクション:単一引用符で

囲み文字は 引用符内の各文字のリテラル値を保持します。一重引用符は、バックスラッシュが前に付いていても、一重引用符間に の間には現れません。

1

一重引用符を使用すると、変数が拡張されません。 bash

ad_request_output=$(/usr/local/nagios/libexec/check_http -w 0.18 -c 0.25 -H ${private_ip} -u "http://${private_ip}/fam/postGetAd.php?site_id=76986&partner_id=27de34b6f8b03d81&banner_id=183517&timeout=5000&version=1.5.1&language=jsp&format=wap&phone_headers=REMOTE_ADDR=>166.137.8.134||REMOTE_HOST=>http://localhost||HTTP_USER_AGENT=>Mozilla/5.0") 
1

Olivは既にあなたの質問に正しく答えました。しかし、私はあなたが将来自分自身で答えを見つけることができるようにいくつかの助けを加えたいと思います。

#!/bin/bash 
private_ip=127.0.0.1 
ad_request_output=$(check_http -H $private_ip -u 'http://$private_ip/fam/postGetAd.php') 
echo $ad_request_output; 

あなたは、単にそれが

bash -x test.sh 

を実行する前に、すべてのコマンドを出力パラメータ-x、とのbashを呼び出すことができます(私はコマンドを簡素化)を開始するスクリプトを考えると

出力:

[email protected] /tmp> bash -x test.sh 
+ private_ip=127.0.0.1 
++ check_http -H 127.0.0.1 -u 'http://$private_ip/fam/postGetAd.php' 
t.sh: Line 4: check_http: Command not found 
[...] 

$ private_ipが1回だけ交換されたが、th e 2回目。

もう1つの方法は、コマンドの前に "echo"を置いて出力することです。

#!/bin/bash 
private_ip=127.0.0.1 
ad_request_output=$(echo check_http -H $private_ip -u 'http://$private_ip/fam/postGetAd.php') 
echo $ad_request_output; 

出力:

[email protected] /tmp> ./test.sh 
check_http -H 127.0.0.1 -u http://$private_ip/fam/postGetAd.php 

できるだけ早くあなたがそれで何が起こっているか知っているように、正しい検索語を入力する簡単なはずです。

+0

デバッグのヒントありがとうございます。 –