Pacman жалуется, что «ядро базы данных не существует»

Существует два основных способа захвата вывода команды в сценарии оболочки: подстановка команды и чтение встроенного модуля.

Простой способ разделить вывод на слова - это использовать встроенную в оболочку функцию разделения и поместить вывод в массив:

words=($(echo "X and Y are friends"))
echo "The ${words[5]} are ${words[1]} and ${words[3]}"

Это работает в оболочках с массивами: ksh93¹, mksh, bash, zsh. В других оболочках вы не можете хранить список слов, кроме как в позиционных параметрах.

set -- $(echo "X and Y are friends")
echo "The $5 are $1 and $3"

На самом деле, каждое слово в выводе рассматривается как шаблон подстановочного знака и заменяется списком подходящих файлов, если таковые имеются. (За исключением zsh, который делает это только при явном указании, если только не в режиме совместимости с sh). Например, если одним из слов является *, оно будет заменено списком файлов в текущем каталоге. Чтобы избежать этого, отключите согласование подстановочных знаков:

set -f
words=($(echo "* and / are punctuation"))
echo "Here's some ${words[5]}: ${words[1]} and ${words[3]}"
set +f

С помощью read вы можете назначить отдельные слова переменной. Сложность read в том, что поскольку она читает из стандартного ввода, ее часто используют в качестве правой стороны в трубе; но в большинстве оболочек (за исключением ATT ksh и zsh) обе стороны трубы работают в под-оболочке, поэтому назначения переменных теряются за пределами трубы. Вы можете поместить read как часть последовательности инструкций.

echo "X and Y are friends" | {
  read -r first conjunction second verb complement remainder
  echo "The $complement are $first and $second"
}

Альтернативно, в ksh93, bash или zsh, вы можете передать ввод в подстановке процесса.

read -r first conjunction second verb complement remainder <(echo "X and Y are friends")
echo "The $complement are $first and $second"

Если вы хотите хранить слова в массиве, вы можете использовать read -rA words в mksh, ksh93 и zsh, или read -ra words в bash, например, в bash

read -ra words <(echo "X and Y are friends")

эквивалентно

set -f; words=$((echo "X and Y are friends")); set +f

если команда выводит одну строку, за исключением того, что она не сбрасывает опцию -f, если она была включена ранее.

¹ В Ksh88 есть массивы, но присвоение использует другой синтаксис.

0
05.12.2017, 17:11
1 ответ

Сначала нужно выполнить pacman -Syu, затемpacman -S postgresql

Причина, по которой возникает ошибка такого типа, заключается в том, что в pacman нет списка доступных пакетов. pacman -Syuобновит (или создаст )список доступных пакетов, а затем обновит уже установленные пакеты.

Перед установкой вы можете использовать pacman -Ss postgresqlдля просмотра списка пакетов, соответствующих вашему вводу, это поможет вам выяснить, какие пакеты вам нужны.

Для получения более подробного списка возможностей pacman прочитайте сообщение Archwiki о pacman

2
28.01.2020, 02:32

Теги

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