나는 에서 함수를 정의하고 또는 를 ~/.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:
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://stackoverflow.com/questions/6218268/how-to-define-a-bash-function-for-use-in-any-script
모든 스크립트에서 사용할 전역적으로 사용 가능한 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
)에 추가되는 것을 방지할 수 있습니다.