Как мне передать список, выделенный в новую строку, в качестве аргументов другой команды?

Сегодня столкнулась с такой же проблемой на безголовом сервере Ubuntu 12.04 с PCI Qualcomm Atheros AR9485 wlan. Я считаю, что разблокирование с помощью rfkill должно решить проблему.

rfkill unblock all

Однако я не смог получить доступ к Интернету для установки rfkill. Поэтому, устанавливая сервер Ubuntu 14 на одном компьютере, я выбрал Qualcomm Atheros AR9485 в качестве основного NIC и подключился к беспроводному маршрутизатору во время конфигурации. Если он по-прежнему отключен после завершения установки, возможно, вам придется включить его в сетевые интерфейсы

sudo nano /etc/network/interfaces

, а затем добавить

auto wlan0
.....

Не забудьте включить essid (с учетом регистра ), IP и безопасность wep / wap (google that)

6
задан 18 December 2017 в 15:02

6 ответов

Используйте xargs:

mycommand | xargs -L1 id

Пример:

$ (echo root; echo nobody) | xargs -L1 id
uid=0(root) gid=0(root) groups=0(root)
uid=65534(nobody) gid=65534(nogroup) groups=65534(nogroup)

Вы также можете перебирать вход в bash:

mycommand | while read line
do
    id "$line"
done

xargs преобразует входные данные в аргументы команды. Опция -L1 сообщает xargs использовать каждую строку в качестве единственного аргумента для вызова команды.

15
ответ дан 22 May 2018 в 16:55
  • 1
    Если я знаю, что он разделен на новую строку, и существует некоторая опасность того, что входной поток может содержать пробелы, я использую '-d \ n', как есть: mycommand | xargs '-d\n' -L1 id Довольно часто всегда хорошая идея, а также правильная «цитата из цитаты» ; всех переменных оболочки. – Seth Robertson 18 December 2017 в 21:34
  • 2
    @SethRobertson очень верно. Я остановился на -d '\n' и IFS= read -r, так как ввод называется именами пользователей, я чувствовал, что это может быть излишним. – Olorin 19 December 2017 в 05:01

Используйте xargs:

mycommand | xargs -L1 id

Пример:

$ (echo root; echo nobody) | xargs -L1 id uid=0(root) gid=0(root) groups=0(root) uid=65534(nobody) gid=65534(nogroup) groups=65534(nogroup)

Вы также можете перебирать вход в bash:

mycommand | while read line do id "$line" done

xargs преобразует входные данные в аргументы команды. Опция -L1 сообщает xargs использовать каждую строку в качестве единственного аргумента для вызова команды.

15
ответ дан 18 July 2018 в 00:57

Используйте xargs:

mycommand | xargs -L1 id

Пример:

$ (echo root; echo nobody) | xargs -L1 id uid=0(root) gid=0(root) groups=0(root) uid=65534(nobody) gid=65534(nogroup) groups=65534(nogroup)

Вы также можете перебирать вход в bash:

mycommand | while read line do id "$line" done

xargs преобразует входные данные в аргументы команды. Опция -L1 сообщает xargs использовать каждую строку в качестве единственного аргумента для вызова команды.

15
ответ дан 24 July 2018 в 17:18

С помощью bash вы можете захватывать строки вывода в массив:

mapfile -t lines < <(mycommand)

И затем перебирать их

for line in "${lines[@]}"; do
    id "$line"
done

Это не так кратки, как xargs, но если вам нужны строки более чем для одного, это очень полезно.

4
ответ дан 22 May 2018 в 16:55
  • 1
    что означает `& lt; & lt; `mean? – yukashima huksay 18 December 2017 в 15:39
  • 2
    Первый < является обычным перенаправлением stdin mapfile. <(...) является подстановкой процесса - замены процессов очень полезны, чтобы избежать проблем из-за конвейеров, работающих в подоболочках. – glenn jackman 18 December 2017 в 18:12

С помощью bash вы можете захватывать строки вывода в массив:

mapfile -t lines < <(mycommand)

И затем перебирать их

for line in "${lines[@]}"; do id "$line" done

Это не так кратки, как xargs, но если вам нужны строки более чем для одного, это очень полезно.

4
ответ дан 18 July 2018 в 00:57

С помощью bash вы можете захватывать строки вывода в массив:

mapfile -t lines < <(mycommand)

И затем перебирать их

for line in "${lines[@]}"; do id "$line" done

Это не так кратки, как xargs, но если вам нужны строки более чем для одного, это очень полезно.

4
ответ дан 24 July 2018 в 17:18
  • 1
    что означает `& lt; & lt; `mean? – yukashima huksay 18 December 2017 в 15:39
  • 2
    Первый < является обычным перенаправлением stdin mapfile. <(...) является подстановкой процесса - замены процессов очень полезны, чтобы избежать проблем из-за конвейеров, работающих в подоболочках. – glenn jackman 18 December 2017 в 18:12

Другие вопросы по тегам:

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