Eu gosto de definir uma função ~/.bashrc
e usá-la em diferentes scripts via export -f
ou source .bashrc
.
A função:
nano ~/.bashrc
function test_func() {
yt-dlp -f '299+140' --merge-output-format mp4 -cia List.txt;
}
export -f test_func
O roteiro:
#!/bin/bash
cd /home/admn/Downloads/YT_DL;
test_func --autonumber-start 101 -o '%(autonumber)1d_%(title)s.%(ext)s';
Problema-1:
Depois test_func
de , o resto do comando --autonumber-start 101 -o '%(autonumber)1d_%(title)s.%(ext)s'
não está funcionando.
Problema-2:
Anteriormente, quando tentei usar source .bashrc
no meu script, estava recebendo estes erros:
/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
A função (sem export -f
):
nano ~/.bashrc
function test_func() {
yt-dlp -f '299+140' --merge-output-format mp4 -cia List.txt;
}
O script (com source .bashrc
):
#!/bin/bash
source .bashrc
cd /home/admn/Downloads/YT_DL;
test_func --autonumber-start 101 -o '%(autonumber)1d_%(title)s.%(ext)s';
Editar-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
$
Estes são alguns dos tópicos pelos quais passei; e embora eu tenha algumas idéias, ainda não consegui encontrar uma solução para o meu caso de uso. Obrigado.
https://stackoverflow.com/questions/6218268/how-to-define-a-bash-function-for-use-in-any-script
Defina uma função bash globalmente disponível para ser usada por qualquer script
SO: Ubuntu MATE 21.04
Bash: versão 5.1.4(1) (x86_64-pc-linux-gnu)
Se você quiser que a função use parâmetros, você precisa mencioná-los explicitamente.
"$@"
significa "todos os parâmetros", você também pode usar parâmetros posicionais como"$1"
,"$2"
, etc.Se você originar um arquivo de um diretório diferente, precisará especificar um caminho completo para ele ou ter o caminho do arquivo em
$PATH
.Após a atualização: Your
.bashrc
contém umreturn
que interrompe o processamento.bashrc
se não estiver sendo executado em um shell interativo. Coloque a declaração da função em algum lugar antes da condição se você quiser executá-la também em shells não interativos.