LINUX.ORG.RU

Shell. Записать в переменную команду или условие (не результат), а затем выполнить

 


0

1

В скрипте есть несколько операторов if [ ], в квадратных скобках которых есть одинаковое условие, например `pgrep -c $N` -eq 1 По мере доработки скрипта, условие приходится менять. Хотел внести его в переменную a=«`pgrep -c $N` -eq 1», но в переменную сразу записывается результат, либо a=«\`pgrep -c $N\` -eq 1» - получаю «[ too many arguments». Тоже самое необходимо делать для некоторых длинных команд, но пока получаю только «too many arguments».



Последнее исправление: A27 (всего исправлений: 1)

Одинаковые участки кода желательно выносить в функцию, там и будет вызываться каждый раз внешняя прога pgrep. Если у вас всё время весь смысл операции — есть ровно одно совпадение, то [ ] в if не надо.

pgrep1() {
    [ 1 -eq `pgrep -c "$1"` ]
}

if pgrep1 "$N"; then
  echo Ok
fi

vodz ★★★★★
()
Ответ на: комментарий от anonymous

Зачем же сразу в функцию. Я спрашивал как переменной присвоить команду или shell такого не может?

A27
() автор топика
Ответ на: комментарий от A27

Я спрашивал как переменной присвоить команду или shell такого не может?

А подумать? В значении переменной желательно иметь любое сочетание символов. Потому нельзя, чтобы какая-то комбинация реагировала на не просто значение символов, а как действие тогда, когда не надо. А вот когда надо, то и пишите вызов команды. Но с параметром $N у вас всё равно ерунда получится и потому, правильнее — функция.

vodz ★★★★★
()
Последнее исправление: vodz (всего исправлений: 4)
Ответ на: комментарий от A27

Можно, но выглядит как говнокод. Нормой считается пихать в переменные пути к исполняемым файлам типа RSYNC='/usr/bin/rsync', не более.

anonymous
()
Ответ на: комментарий от vodz

Это то зачем?

Я читал в мандариновом угаре, не совсем понял вопрос.

IPR ★★★★★
()
Ответ на: комментарий от anonymous

eval

Ну разве что если и «[]» в переменную писать. Так что с функцией всё равно удобнее.

vodz ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.