2016-03-22 30 views
0

Tüm Bluetooth aygıtlarını sistemimden kaldırmak için basit bir bash komut dosyası oluşturuyorum. Ne yapar, bluetooth cihazları listelemek için bt-device -l kullanın, sonra parens arasında MAC adresini kapar, daha sonra cihazı kaldırmak için bt-device -r <MACAddress> çağrıları. Bash betiklerinde o kadar da iyi değilim ama bt-cihaz çağrısını eko ile değiştirdiğimde doğru çıktıyı elde ediyorum. Komutu tekrar yerleştirdiğimde, cihazın bulunamadığı yazıyor. Eğer çağrıyı el ile yaparsam çalışır (çıkışlar "Tamamlandı").Bash komut dosyası echos ama yürütmeyecek

Numune bt-device -l komutunun çıkışı:

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

Ve betik kullandığım:

#!/usr/bin/env bash 

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

bunu çalıştırın, bt-device -r komutu çalıştırır ama çıkış Error: Device not found olduğu gibi MAC adresini yanlış yazmıştım. echo ile betikteki bt-device aramasını değiştirirseniz, MAC adreslerinin beklenen şekilde listesini alırım.

Sen $x Kullanmadan önce işlemek isterdim

#!/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

'' 'Done''' listede bulduğu her bluetooth cihaz için. –

cevap

2

sorun çıktı on cut -d "(" -f2 | cut -d ")" -f1 azalıyor olmasıdır , bağımsız değişkeni yerine.

Bunun yerine, böyle bir şey yazmalıyım: Ben görmelisiniz

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

Bu gerçek yankıdır, ancak yankı kullanıyorum onu da düzeltebildi. Teşekkürler. –

2

çalışma Güncelleme komut dosyası:

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

Anlayışınız biraz kapalı olsa da, cevabınız, doğru dizeyi elde etmek için sadece kesilen çıktıları yankılamaya ihtiyacım olduğunu fark etmeme yardımcı oldu. Güncellenmiş soruya bakın. Teşekkürler! –

+0

Neden kapalı?) Orijinal kodunuzda temelde bunu yaparsınız: '' 'bt-device -r (xx: xx: xx: xx: xx: xx) | kesmek ... '' 'Doğru yol ilk önce parantezleri keserken, o zaman sonucu kullanın. – dekkard

+0

Aslında sanırım akıl yürütme kapalı değildi. Sadece ekstra değişken yaratmak gerekli değildi. –

İlgili konular