私は で関数を定義し、 または を介してさまざまなスクリプトで使用するのが好き~/.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
https://stackoverflow.com/questions/17219174/bashrc で変数を設定し、shellscript でそれらにアクセスする
あらゆるスクリプトで使用できるグローバルに利用可能なbash関数を定義する
OS: Ubuntu MATE 21.04
Bash: 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
) に追加されるのを防ぐことができます。