LINUX.ORG.RU

Как передать screen функции bash?

 , ,


1

2

Пишу сейчас скрипт, по структуре такой:

function func1 {
   код
}

function func2 {
   код
}

function func3 {
   код
}

screen -dmS name bash -c "func1 && func2 && func3"
Так вот, он не работает. Как заставить выполняться в screen заранее сформированные функции?

★★★★★

С чего бы оно работало? Можешь вставить source этотфайл.sh

anonymous
()

Вот так работает:

function xy()      { echo "Hello world";          }
function wrapper() { echo hey ; $1; echo Rinaldus; }

around xy

или 

function xy()      { echo "xy(): Passed $1 and $2";  }
function wrapper() { echo hey; "$@"; echo Rinaldus; }

wrapper xy 1st 2nd
hope13 ★★★
()

И логично, что не работает - ты же создаешь новый экземпляр баша, не связанный с текущим скриптом. Придётся, наверное или в отдельный файл выносить, или в текущем скрипте делать спец. параметр, по которому запустит их.

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

Ужас какой. А если бы у меня было не несколько функций, а штук 20, мне бы пришлось выносить их в 20 скриптов? Как-то непродуманно это у screen. Ладно, я сделал

screen -dmS name bash -c "source func1.sh && source func2.sh && source func3.sh"
Вроде работает. Но надеюсь, что с таким раскладом func2.sh не запустится, если работа func1 завершилось некорректно. У меня эти функции взаимосвязаны и каждая должна выполняться только если корректно завершилась предыдущая. Во всех функциях проставлены исключения и в случае ошибки exit 1

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

Анонимус предлагал так:

screen -dmS name bash -c "source funcs.sh && func1 && func2 && func3"
screen тут не при чём, так будет при запуске команд в отдельном шелле при любом раскладе, так как функции после их определения существуют только в памяти текущего экземпляра bash.

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