Bash: Определите функцию в bashrc, которая может использоваться любыми скриптами глобально

Мне нравится определять функцию в ~ / .bashrc и использовать его в разных сценариях через export -f или source .bashrc .

Функция:

nano ~/.bashrc

function test_func() {
    yt-dlp -f '299+140' --merge-output-format mp4 -cia List.txt;
}

export -f test_func

Скрипт:

#!/bin/bash

cd /home/admn/Downloads/YT_DL;

test_func --autonumber-start 101 -o '%(autonumber)1d_%(title)s.%(ext)s';

Проблема-1:

После test_func остальная часть команды - autonumber-start 101 -o '% (autonumber ) 1d _% (title) s.% (Ext) s ' вообще не работает.



Проблема-2:

Раньше, когда я пытался использовать исходный .bashrc в моем скрипте, я получал следующие ошибки:

/usr/local/scripts/test.sh: line 3: .bashrc: No such file or directory
/usr/local/scripts/test.sh: line 12: test_func: command not found

Функция (без export -f ]):

nano ~/.bashrc

function test_func() {
    yt-dlp -f '299+140' --merge-output-format mp4 -cia List.txt;
}

Сценарий (с исходным кодом .bashrc ):

#!/bin/bash

source .bashrc

cd /home/admn/Downloads/YT_DL;

test_func --autonumber-start 101 -o '%(autonumber)1d_%(title)s.%(ext)s';

Edit-1 :

$ bash -xv /usr/local/scripts/test.sh
#!/bin/bash

source /home/admn/.bashrc
+ source /home/admn/.bashrc
# ~/.bashrc: executed by bash(1) for non-login shells.
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
# for examples

# alias pip='pip3.7'
alias python='python3'
++ alias python=python3

# If not running interactively, don't do anything
case $- in
    *i*) ;;
      *) return;;
esac
++ case $- in
++ return

test_func --autonumber-start 101 -o '%(autonumber)1d_%(title)s.%(ext)s';
+ test_func --autonumber-start 101 -o '%(autonumber)1d_%(title)s.%(ext)s'
/usr/local/scripts/test.sh: line 5: test_func: command not found
$ 

Это некоторые из тем, через которые я прошел; и хотя у меня есть некоторые идеи, я все еще не мог найти решения для своего варианта использования. Спасибо.

https://unix.stackexchange.com/questions/63665/how-to-define-a-bash-function-that-can-be-used-by-different-scripts

.com / questions / 6218268 / how-to-define-a-bash-function-for-use-in-any-script

-and-accessing-them-in-shellscript

https: // stackoverflow.com / questions / 1500499 / how-do-you-call-a-function-defined-in-bashrc-from-the-shell

Определите глобально доступную функцию bash, которая будет использоваться любым скриптом

ОС: Ubuntu MATE 21.04

Bash: 5.1.4 (1) -release (x86_64-pc-linux-gnu)

0
задан 24 June 2021 в 23:06

1 ответ

Если вы хотите, чтобы функция использовала параметры, вам нужно явно указать их.

function test_func() {
    yt-dlp "$@" -f '299+140' --merge-output-format mp4 -cia List.txt
    #      ~~~~
}

«$ @» означает «все параметры», вы также можете использовать позиционные параметры, такие как «$ 1» , «$ 2» и т. Д.

Если вы отправляете файл из другого каталога, вам нужно либо указать полный путь к нему, либо указать путь к файлу в $ PATH .

source ~/.bashrc
# or
PATH+=:~
source .bashrc

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

3
ответ дан 28 July 2021 в 11:25

Другие вопросы по тегам:

Похожие вопросы: