find Pictures -type f -iname "*.jpg" -print0 | xargs -0 -I {} mv -n "{}" Picturesnew/
Было бы более синтаксически правильным решением, так что восстановите резервную копию и попробуйте.
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()
, обычно )и вызывать ее с самого конца, чтобы на основном уровне не было кода, кроме определений функций.
Спасибо за помощь, 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"