Как вызвать функцию в новом терминале внутри скрипта bash?

#bash #function #terminal #script

Вопрос:

Я написал сценарий, в котором я определяю функцию, а затем вызываю эту функцию в новом терминале. Что-то вроде этого:

 #!/bin/sh

my_func(){
  echo "hello world"
  sleep 5
}

alacritty -e my_func

 

Но я получил ошибку :

[ОШИБКА] [alacrity_terminal] Не удалось создать команду «my_func»: Такого файла или каталога нет (ошибка ОС 2)

Я предполагаю, что этот новый терминал не имеет доступа к функции, которую я определил в сценарии. Как я могу это обойти?

Комментарии:

1. Источник определения функции из .bashrc или из какого-либо другого файла, который терминал запускает при запуске.

2. Попробуйте экспортировать функцию: export -f my_func . Возможно, вам потребуется позвонить в терминал, например alacritty -e 'sh -c my_func'

3. @glennjackman Я попробовал это, но это не сработало.

Ответ №1:

alacritty -e будет запущена команда Linux, и вы даете ей функцию в качестве аргумента, поэтому она не будет работать.

Единственный способ заставить его работать-это разделить его на два сценария. Я позвонил им echo.sh и function.sh.

echo.sh

 echo "Hello man"
sleep 5
 

function.sh

 #!/bin/sh
alacritty -e ./echo.sh
 

Комментарии:

1. Да, это работает, спасибо! Но теперь я задаюсь вопросом, есть ли способ сделать это в одном файле.

2. Я исследовал это, но ничего не нашел, используя быстроту, если вы найдете способ заставить это работать в одном файле, пожалуйста, поделитесь им здесь, это будет полезно для сообщества