Bash: 전 세계적으로 모든 스크립트에서 사용할 수 있는 함수를 bashrc에 정의합니다.

Bash: 전 세계적으로 모든 스크립트에서 사용할 수 있는 함수를 bashrc에 정의합니다.

나는 에서 함수를 정의하고 또는 를 ~/.bashrc통해 다른 스크립트에서 사용하는 것을 좋아합니다 .export -fsource .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:

source .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;
}

스크립트( 포함 source .bashrc):

#!/bin/bash

source .bashrc

cd /home/admn/Downloads/YT_DL;

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

편집-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

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

https://stackoverflow.com/questions/17219174/variables-set-in-bashrc-and-accessing-them-in-shellscript

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

모든 스크립트에서 사용할 전역적으로 사용 가능한 bash 함수를 정의합니다.

운영 체제: 우분투 MATE 21.04

배쉬: 5.1.4(1)-릴리스(x86_64-pc-linux-gnu)

답변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

답변2

또는 스크립트 파일을 소싱하여 '실행'할 수 있습니다. 에서 함수를 사용하여 사용자 정의 스크립트를 정의했다고 가정해 보겠습니다 ./myScript. 그런 다음 이러한 기능을 사용하려는 각 스크립트의 시작 부분에서 이 파일의 소스를 지정합니다.

# Load my custom functions from file
source ./myScript

이는 매우 일반적인 프로그래밍 방식이며, 이렇게 하면 불필요한 별칭과 함수가 .bashrc(또는 .bash_aliases)에 추가되는 것을 방지할 수 있습니다.

관련 정보