Полностью скрыть панель в xfce (gtk 3.0?)

Проще использовать инструмент, поддерживающий поисковые запросы:

$ s="battery.charge: 90 battery.charge.low: 30 battery.runtime: 3690 battery.voltage: 230.0 device.mfr: MGE UPS SYSTEMS device.model: Pulsar Evolution 500"
$ grep -oP '\S+:\s+.*?(?=\s+\S+:|$)' <<< "$s"
battery.charge: 90
battery.charge.low: 30
battery.runtime: 3690
battery.voltage: 230.0
device.mfr: MGE UPS SYSTEMS
device.model: Pulsar Evolution 500

Если вам нужен результат в виде массива:

$ IFS=$'\n' foo=($(grep -oP '\S+:\s+.*?(?=\s+\S+:|$)' <<< "$s"))
$ for i in "${!foo[@]}"; do echo "$i<==>${foo[i]}"; done
0<==>battery.charge: 90
1<==>battery.charge.low: 30
2<==>battery.runtime: 3690
3<==>battery.voltage: 230.0
4<==>device.mfr: MGE UPS SYSTEMS
5<==>device.model: Pulsar Evolution 500

РЕДАКТИРОВАТЬ: Объяснение регулярного выражения:

'\S+:\s+.*?(?=\s+\S+:|$)'
  • \ S + соответствует одному или нескольким непробельным символам
  • : соответствует :
  • \ s + соответствует одному или нескольким пробелам после :
  • .*? обозначает нежадное совпадение
  • (? = \ S + \ S +: | $) - это предварительное утверждение для определения наличия:
    • одного или нескольких пробелов за которым следует строка (символы без пробелов) и двоеточие или
    • конец строки

Таким образом, строка разбивается на части, например battery.charge: 90 , ... device.mfr: MGE UPS SYSTEMS , ...


Ниже приведены ссылки на несколько онлайн-анализаторов регулярных выражений:

0
06.01.2019, 05:10
3 ответа

Предположение:У меня сложилось впечатление, что как только вы попытались установить Node и NPM, вы пытаетесь выполнить их, не зная фактического пути к ним в скрипте. Это то, на чем я основываю свой ответ.


Вызывающий узел и NPM:

Эта строка должна помочь:

$(which <command>) <command arguments>

Таким образом, для некоторых пакетов NPM вы можете использовать:

$(which npm) install <packagename>

Это связано с тем, что полный путь к исполняемому файлу (, если он указан перед чем-либо еще в bash ), является тем, что он собирается выполнить. Конструкция "$ ()" буквально заменит этот исполняемый файл в bash.

Пример:

$(which yes) IT WORKS!

Который распечатает "ЭТО РАБОТАЕТ!" на экране несколько раз, пока не будет прервано.

Как отмечалось в комментариях, если вы знаете, куда будут установлены Node и NPM, вы можете просто использовать их полные пути для их выполнения (, хотя см. примечание, чтобы узнать, как это сделать лучше ).


(Если вам нужно установить ruby, вы сами по себе, хотя я думаю, что вы просто сделаете что-то похожее на эту строку "curl" ).


ПРИМЕЧАНИЕ.:У вас уже есть «/usr/local/bin» и «/usr/bin» в переменной $PATH вашего скрипта, поэтому, если у вас не происходит чего-то шаткого, вы можете запустить «ruby» и "варить" без указания их полных путей.

0
28.01.2020, 02:41

ДОБАВЛЕНО:Как найти node.

Я предлагаю вам удалить node@8 и повторно -установить node@8 с опцией --verbose.

brew uninstall node@8
brew install --verbose node@8

Может показывать этапы установки. Надеюсь, из вывода вы сможете найти расположение nodeи его символические ссылки.

Или,

Вы можете найти пути к установленным файлам из пакета узла с помощью команды brew list.

brew list node@8

Показывает все установленные файлы.

И затем, если вы можете использовать GNU find, он может найти символическую ссылку определенного файла.

find -L /dir/to/start/find -samefile /the/path/of/the/original/file

Если вы найдете символическую ссылку узла, созданную brew, добавьте путь к $PATH. Если символической ссылки не существует, вы должны сделать символическую ссылку самостоятельно или добавить путь к исходному файлу node.

Ответ вызван непониманием вопроса:Как использовать whichи переменные

Я назначаю путь переменной вот так:

#!/bin/bash

NODE=`which node`
NPM=`which npm`

echo "Node.js path: ${NODE}"
$NODE -v

echo "npm path: ${NPM}"
$NPM -v

ПРИМЕЧАНИЕ:`which node`равно $(which node). Обратные кавычки (обратные кавычки )и $ ()возвращают результат.

whichвозвращает полный путь к команде, поэтому `which node`возвращает путь, по которому установлен node.js. И присваивается переменной $NODE.

0
28.01.2020, 02:41

Brew обычно устанавливает файлы в /usr/local/Cellarи символически связывает их с /usr/local/bin.

$PATHна этих новых коробках, вероятно, не содержит /usr/local/bin. Итак, у вас есть два варианта:

  1. Прочтите о brew и узнайте, куда будут установлены эти пакеты, проверьте статус выхода для brew install..., а затем жестко задайте путь к новым бинарным файлам/скриптам, которые устанавливает brew, изменив свой скрипт, включив в него абсолютный пути.

    Если brew install fooсработало, то двоичный файл fooдолжен быть доступен для вызова с помощью /usr/local/bin/foo.

    Это должно дать вам подсказку, сработало ли brew install:

    /usr/local/bin/brew install node@8
    status=$(echo $?)
    if [[ "$status" -ne 0 ]]; then
        echo "Brew install node failed!"
        exit 1
    fi
    ...
    

    Если вы хотите полностью автоматизировать этот скрипт, проверьте наличие ошибок при вызове команд и обработайте их .

  2. Обновите системный путь, прежде чем сценарий попытается использовать его для разрешения команд. Это должно сработать:

    #!/bin/bash
    export PATH="/usr/local/bin:$PATH"
    ...
    

    Это не зависит от окружения bash пользователя и должно исправить приведенные выше команды which. Но подумайте, нужны ли в любом случае ваши новые коробки /usr/local/binв $PATH?

1
28.01.2020, 02:41

Теги

Похожие вопросы