Kenny00
@Kenny00

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

Есть скрипт/программа, который нужно выполнить 1 командой несколько раз. Постоянно не перепечатывать аргумент. Один из аргументов по сути список.

Приходится делать так 10 раз... (а потом и более...)
appman -f /etc/AlterPro/apps_sys.conf standby unregister --sys-id 3
appman -f /etc/AlterPro/apps_map.conf standby unregister --sys-id 3
appman -f /etc/AlterPro/apps_ctrl.conf standby unregister --sys-id 3
 
. . . 

appman -f /etc/AlterPro/apps_port.conf standby unregister --sys-id 3

При попытке сделать подобное:
exec appman -f /etc/AlterPro/apps_{sys, map, ctrl, port}.conf standby unregister --sys-id 3

Подстановка выполняется, но всё в одну команду, а нужно выполнить раздельно.
Каждый экземпляр отдельно, как будто мы каждый раз вызываем скрипт, с новым параметром.

И такая же, мысль с sudo service {sys, map, ctr, port} restart, перезапустить группу сервисов.

Список будет расти, его можно например, получить из текстового файла. Или команды ls.
  • Вопрос задан
  • 143 просмотра
Решения вопроса 4
saboteur_kiev
@saboteur_kiev Куратор тега Linux
software engineer
юзай xargs
echo -n /etc/AlterPro/apps_{sys,map,ctrl,port}.conf | xargs -d" " -n1 -I NAME appman -f NAME standby unregister --sys-id 3
Ответ написан
hydrugz
@hydrugz
реклама
Так пойдет?
$ cat args.sh
#!/bin/bash
ARGS="$*"
for arg in $ARGS; do
    echo -e "действие с /etc/AlterPro/$arg"
done
--------
$ bash args.sh apps_sys apps_map apps_ctrl apps_port
действие с /etc/AlterPro/apps_sys
действие с /etc/AlterPro/apps_map
действие с /etc/AlterPro/apps_ctrl
действие с /etc/AlterPro/apps_port

Замените эхо на свою команду и подставьте арг
Циклы https://rtfm.co.ua/bash-opisanie-ciklov-for-while-...
Ответ написан
dyuriev
@dyuriev
A posteriori
for app in sys map ctrl port; do appman -f /etc/AlterPro/apps_$app.conf standby unregister --sys-id 3; done;


Из файла как то так
for app in $(cat /path/to/file.txt); do appman -f /etc/AlterPro/apps_$app.conf standby unregister --sys-id 3; done;

или while используйте
Ответ написан
leahch
@leahch Куратор тега Linux
Я мастер на все руки, я козлик Элек Мэк :-)
ls /etc/AlterPro/apps_{sys, map, ctrl, port}.conf | xargs -n 1  -I {} appman -f  {} standby unregister --sys-id 3
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы