Você pode colocar vários scripts executáveis em um diretório e, ao acessar esse diretório, disponibilizar todos esses comandos?

3

Eu quero colocar um monte de scripts executáveis no diretório .command (que também é executável) e, então, só tenho que criar esse diretório em meu .bash_profile. Isso é possível? Eu posso conseguir isso para trabalhar com um arquivo. Mas ao adicionar um segundo arquivo, os comandos do segundo arquivo não estão disponíveis no shell.

meu .bashprofile

source ~/.commands/*

minha pasta .commands

-rwxr-xr-x   1 christopherreece  staff   108 Dec 14 08:55 server_utils.sh
-rwxr-xr-x   1 christopherreece  staff    23 Dec 14 09:04 short

conteúdo do curta

echo 'a short program'

concursos de server_utils.sh

function upfile {
  scp $1 root@myserveripadress:~/
}

Entrada e saída do shell.

$ hello
hello

$ short
-bash: short: command not found
    
por Christopher Reece 14.12.2017 / 01:20

1 resposta

4

Você não pode fazer isso com um source . O primeiro argumento é tomado como o nome do arquivo, os outros aparecem como os parâmetros posicionais $1 , $2 ... no script de origem.

$ cat test.src 
echo hello $1
$ source test.src there
hello there

Mas você poderia fazer isso com um loop:

for f in ~/commands/*.src; do
    source "$f"
done

(Como um aparte, ter coisas desse tipo incluem apenas arquivos com uma certa extensão é bastante útil se você usar um editor que deixa os arquivos de backup com um ~ . As cópias de backup não ficam ativas acidentalmente , então.)

No entanto, se você tiver um script de origem que contenha comandos simples (como echo acima ou short ), eles serão executados quando o script for source d. Eles não geram nenhuma função no shell de fornecimento.

$ cat test2.src 
echo "shows when sourced"
func() {
    echo "shows when function used"
} 
$ source test2.src 
shows when sourced
$ func
shows when function used

Se você quiser ter scripts executáveis, o tipo em que o script é executado quando você der seu nome como um comando, coloque-os em algum lugar em PATH (sugiro usar ~/bin para isso), dê a eles executar permissão e colocar hashbangs apropriados no início dos scripts ( #!/bin/sh ou #!/bin/bash ou qualquer outra coisa)

    
por 14.12.2017 / 01:42