1

Вы знаете, когда вы делаете что-то вроде apt-cache search something | less? Хорошо (в скрипте Bash), как вы получаете входные данные и устанавливаете их в переменную (например, чем less , тем less сценарий Bash)?

2 ответа2

3

Вы недоразумение command | less В этом случае команда less не вызывает соединение; труба соединяет предыдущую команду с less . Кроме того, вы говорите «вход», где я думаю, что вы имеете в виду «выход». В этом случае вы вводите данные в терминал; вывод - то, что command выплевывает обратно. less получает вывод команды через | (иначе трубка). Канал принимает стандартный вывод одной команды и подключает его как стандартный ввод другой. (Вы можете найти эту статью в Википедии полезной для начала.)

Чтобы назначить вывод одной команды для переменной, вы обычно делаете что-то вроде этого:

variable=$(command)
# older syntax for above
variable=`command`

Но я очень сомневаюсь, что вы действительно хотите присвоить вывод переменной apt-cache search foo переменной.

Можете ли вы немного рассказать о своей более крупной цели? Что ты на самом деле пытаешься сделать?

1

Если вы хотите сделать что-то наподобие того, что делает less (получать входные данные на его стандартный ввод, обрабатывать их, а затем выводить) в сценарии, который вы пишете, вы можете использовать цикл while read в вашем сценарии.

#!/bin/bash
echo "Beginning"
while read -r line
do
    echo "Processed: [$line]"
done
echo "Ending"

Тогда вы можете запустить его так:

some_command | your_script

и ваш вывод будет выглядеть так:

Beginning
Processed: [First line of input]
Processed: [Second line of input]
Processed: [Third line of input]
Processed: [Fourth line of input]
Ending

Предполагая, что some_command сам по себе выводит:

First line of input
Second line of input
Third line of input
Fourth line of input

Переменной $line присваивается значение каждой строке ввода по очереди. Вы можете накапливать эти строки, если вам нужно, объединяя каждую строку в скалярную переменную:

all=$all$line

или же

all+=$line

или добавляя элементы в конец массива:

array+=($line)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .