2016-03-22 20 views
0

シンプルなbashスクリプトを作成して、システムからすべてのBluetoothデバイスを削除します。それがするのは、bt-device -lを使用してBluetoothデバイスをリストし、次に括弧の間のMACアドレスを取得してから、bt-device -r <MACAddress>を呼び出してデバイスを削除します。私はbashスクリプトでそれほど素晴らしいとは言えませんが、私がbtデバイスコールをechoに置き換えると、正しい出力が得られます。コマンドを戻すと、デバイスが見つからなかったと表示されます。私が手動で電話をかけると、それは機能します(「完了」を出力します)。Bashスクリプトのエコーは実行されません

サンプルbt-device -lコマンドの出力:

Added Devices: 
Samico BP (12:34:56:78:9a:bc) 
SensorTag 2.0 (12:34:56:78:9a:bd) 

、スクリプト私が使用している:

#!/usr/bin/env bash 

bt-device -l | sed 1d | 
while read x; do 
    bt-device -r $x | cut -d "(" -f2 | cut -d ")" -f1 
done 

私はそれを実行し、それがbt-device -rコマンドを実行しますが、出力はError: Device not foundであるかのように私は間違ったMACアドレスをタイプした。スクリプトのbt-deviceコールをechoに置き換えると、期待どおりのMACアドレスのリストが表示されます。

あなたは$x前にそれを使用して処理したいと思います

#!/usr/bin/env bash 

bt-device -l | sed 1d | 
while read x; do 
    bt-device -r $(echo $x | cut -d "(" -f2 | cut -d ")" -f1) 
done 
+0

代わりに、あなたはこのような何かを書く必要があります。 –

答えて

2

問題は、あなたが出力の上cut -d "(" -f2 | cut -d ")" -f1を実行しているということですそのの引数ではなく、bt-device -rです。私は `それがリストに見つかった各Bluetoothデバイスのための` `Done```が表示されるはずです

bt-device -l | sed 1d | cut -d "(" -f2 | cut -d ")" -f1 | 
while read x; do 
    bt-device -r $x 
done 
+0

これは本当の答えです。それを修正することもできました。ありがとう。 –

2

作業更新スクリプト:

bt-device -l | sed 1d | 
while read x; do 
    dev=$(echo "$x" | cut -d "(" -f2 | cut -d ")" -f1) 
    bt-device -r "$dev" 
done 
+0

あなたの推論はちょっとしたものですが、あなたの答えは、適切な文字列を得るためにカット出力をエコーする必要があることを理解するのに役立ちました。更新された質問をご覧ください。ありがとう! –

+0

なぜオフですか? )オリジナルのコードでは、基本的にこれを行います: '' 'bt-device -r(xx:xx:xx:xx:xx:xx)|カット... "' '適切な方法は、最初に括弧をカットし、結果を使用している間。 – dekkard

+0

実際に私は推測がオフではなかったと思う。余分な変数を作成するだけでは必要ありませんでした。 –

関連する問題