Вы знаете, когда вы делаете что-то вроде apt-cache search something | less
? Хорошо (в скрипте Bash), как вы получаете входные данные и устанавливаете их в переменную (например, чем less
, тем less
сценарий Bash)?
2 ответа
Вы недоразумение command | less
В этом случае команда less
не вызывает соединение; труба соединяет предыдущую команду с less
. Кроме того, вы говорите «вход», где я думаю, что вы имеете в виду «выход». В этом случае вы вводите данные в терминал; вывод - то, что command
выплевывает обратно. less
получает вывод команды через |
(иначе трубка). Канал принимает стандартный вывод одной команды и подключает его как стандартный ввод другой. (Вы можете найти эту статью в Википедии полезной для начала.)
Чтобы назначить вывод одной команды для переменной, вы обычно делаете что-то вроде этого:
variable=$(command)
# older syntax for above
variable=`command`
Но я очень сомневаюсь, что вы действительно хотите присвоить вывод переменной apt-cache search foo
переменной.
Можете ли вы немного рассказать о своей более крупной цели? Что ты на самом деле пытаешься сделать?
Если вы хотите сделать что-то наподобие того, что делает 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)