#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. Я исследовал это, но ничего не нашел, используя быстроту, если вы найдете способ заставить это работать в одном файле, пожалуйста, поделитесь им здесь, это будет полезно для сообщества