Страница 3 из 3

Re: По поводу sh

Добавлено: 22 дек 2016, 20:51
nezabudka
Да, я так понимаю запускаемый скрипт не соответствуе директории в которую заходим.
Поменяйте относительные пути ./run.sh ./auth.sh на полные /home/полный_путь/run.sh и т. д.

Re: По поводу sh

Добавлено: 22 дек 2016, 20:54
nezabudka
FoxSeaSha писал(а):Есть такое дедик малех лёг)
По другому и не могло быть., мы в замкнутом цикле запускаем кучу скриптов, притом бессмысленных. :D

Re: По поводу sh

Добавлено: 22 дек 2016, 21:05
nezabudka
Попробуйте добавить в конце каждого скрипта закрытие сессии в которой
запускался скрипт. В конце первого скрипта строчка будет такая

Код: Выделить всё

screen -S Bungee -X quit
Для следующих вставте имя соответствующей сессии вместо Bungee

Re: По поводу sh

Добавлено: 22 дек 2016, 21:12
FoxSeaSha
Я уже разобрался) Спасибо)

Re: По поводу sh

Добавлено: 23 дек 2016, 13:45
Olej
FoxSeaSha писал(а):( Что-то типо рекурсии )
Любопытная оговорка...

1. На shell/bash в принципе нельзя написать рекурсивные функции, в отличие от подавляющего большинства языков программирования.
Это связано с тем, что функции bash могут возвращать только значения кода завершения в пределах [0...255], т. е. в этом смысле — не имеющие возвращаемых вычисленных значений вообще.

2. Но можно организовать рекурсивный вызов самих скриптов bash из выполняющихся скриптов bash. Вот, как пример, вычисление чисел Фибоначчи:

Код: Выделить всё

#!/bin/bash 

if [ "$1" -lt "2" ] 
then 
   echo "1" 
else 
   f1=$($0 `expr $1 - 1`) 
   f2=$($0 `expr $1 - 2`) 
   echo `expr $f1 + $f2` 
fi 

Код: Выделить всё

[olej@dell speed]$ ./fibo.sh 8
34
Но это чудовищно медленно!

3. Можно и искусственно организовать (внутри скрипта) рекурсию в функциях bash (с очередью, стеком возвратов), хорошо понимая как вообще реализуется рекурсия вызовов. Те же числа Фибоначчи:

Код: Выделить всё

#!/bin/bash 

declare -a res 

fib () { 
   if [ "$1" -lt 2 ] 
   then 
      res[ $1 ]=1. 
   else. 
      fib `expr $1 - 1` 
      let s=${res[ `expr $1 - 1` ]}+${res[ `expr $1 - 2` ]} 
      res[ $1 ]=$s 
   fi 
} 

res[ 0 ]=1 
fib $1 
echo ${res[ $1 ]} 
И это на несколько порядков быстрее.