выход из амперсанда при возврате через awk - PullRequest
0 голосов
/ 16 октября 2018

Я использую echo $(/System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport -I | grep "SSID:" | grep -v "BSSID" | awk '{$1=""; print $0}', чтобы получить имя Wi-Fi для приглашения zsh.

оно отлично работает со стандартными именами, но если имя имеет какие-либо нестандартные символы, например, B & Q_Public, оно возвращает только B изатем говорит

(eval):1: command not found: Q

Любые предложения

1 Ответ

0 голосов
/ 16 октября 2018

Во-первых, длинный путь утилиты airport ужасно громоздок.Давайте создадим символическую ссылку.

sudo ln -s /System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport /usr/bin/airport

Предполагая вывод программы, подобный этому (основываясь на некотором поиске в Google, я взял this в качестве примера):

     agrCtlRSSI: -76
     agrExtRSSI: 0
    agrCtlNoise: -92
    agrExtNoise: 0
          state: running
        op mode: station
     lastTxRate: 24
        maxRate: 54
lastAssocStatus: 0
    802.11 auth: open
      link auth: wpa2-psk
          BSSID: c0:3e:f:2f:c3:ad
           SSID: B&Q_Public
            MCS: -1
        channel: 4

и желаемый результат, равный B&Q_Public (SSID), достаточно использовать одну команду awk:

airport -I | awk -F ": " '/ SSID:/{print $2}'

Примечания:

  • Разделитель полей установлендо ': ', значения всегда будут в $2.
  • До SSID: есть пробел, это препятствует совпадению строки с BSSID:.
  • Нет необходимостизапустите grep дважды здесь, awk может выдержать очень хорошо.

Здесь нигде не запускается eval, так что я не думаю, что одна эта строка может вызвать ошибку, которую вы показываете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...