Выполнение переменной Bash

find Pictures -type f -iname "*.jpg" -print0 | xargs -0 -I {} mv -n "{}" Picturesnew/

Было бы более синтаксически правильным решением, так что восстановите резервную копию и попробуйте.

-1
13.08.2019, 17:10
2 ответа

the problem is that when i run my script without argument i just want to read the usage() fonction.

Хорошо, рассмотрите структуру вашего скрипта и тот факт, что оболочка выполняет его, начиная с самого верха:

FLOWER_STATUS="/etc/init.d/flowerGenesisPlugin status"
SOLR_STATUS=$(ps -f -u alfresco|grep -v UID)
ALFRESCO_STATUS=$(ps -f -u alfresco|grep Dalfresco|grep -v UID)
POSTGRES_STATUS=$(ssh -t root@slql-fresc-bdd1 "ps -f -u alfresco|grep postgres|grep -v UID")

usage() {
  ...
}

case "$1" in
    status) status ;;
    start)   start ;;
    stop)    stop ;;
    restart) stop; start ;;
    *) usage >&2 ;;
esac

Самое первое, что у вас есть в сценарии, это задания для POSTGRES_STATUSи друзей. Они содержат подстановки команд, которые запускаются во время назначения . В оболочке нет ленивых вычислений, как в make.(Кроме того, с чем вы соорудили eval, но не будем об этом.)

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

usage() {
   echo...
}

case "$1" in 
  ...
   *) usage; exit 1 ;;
esac

POSTGRES_STATUS=...

Или также поместите присваивания в функцию и вызывайте ее только после проверки.

usage() {
    echo...
}
check() {
    case "$1" in...
        *) usage; exit 1;;
    esac
}
set_globals() {
    POSTGRES_STATUS=...
}

check
set_globals

Вы также можете поместить основную часть кода в выделенную функцию (main(), обычно )и вызывать ее с самого конца, чтобы на основном уровне не было кода, кроме определений функций.

4
28.01.2020, 05:07

Спасибо за помощь, ilkkachu, я постараюсь больше использовать функцию, чтобы получить более чистый код.

Наконец-то я поместил свою переменную в статус функции.:

status() {
local POSTGRES_STATUS=$(ssh -t root@myhost "ps -f -u process|grep postgres|grep -v UID")
echo -e "\n"
echo -e "$POSTGRES_STATUS"
0
28.01.2020, 05:07

Теги

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