Atualizando o arquivo ~ / .bashrc para um script

4

Estou desenvolvendo um script que irá configurar e configurar um ambiente de desktop ubuntu. Uma das alterações feitas é anexar funções e outras coisas ao arquivo ~/.bashrc . Posteriormente no script, preciso chamar uma das funções adicionadas a ~/.bashrc , mas recebo o erro command not found . Aqui está um script de exemplo:

# t.sh
#!/bin/bash

text='test-func() { echo It works!; }'
echo "$text" >> ~/.bashrc

source ~/.bashrc
test-func

echo checkpoint

Saída:

./t.sh: line 10: test-func: command not found
checkpoint

Eu assumi que% sour~/.bashrc iria atualizar o shell, permitindo-me chamar test-func , mas isso não acontece. Pesquisando, encontrei exec bash para substituir source ~/.bashrc .

Nova saída:

./t.sh: line 10: test-func: command not found

Do meu entendimento de exec , ele apenas cria uma nova shell cortando o script; portanto, "ponto de verificação" nunca é impresso.

Como posso atualizar ~/.bashrc e executar as atualizações no mesmo script?

Qualquer ajuda é muito apreciada.

    
por Nelson 25.03.2017 / 11:26

1 resposta

4

Na verdade, seu .bashrc é originado. No entanto, .bashrc deve ser lido por shells interativos. Um shell que executa um script não é interativo.

No Ubuntu, .bashrc verifica se a origem do shell é interativa e, de outro modo, interrompe a execução. Você deve encontrar esta linha para o começo:

# If not running interactively, don't do anything
[ -z "$PS1" ] && return

Isso faz com que seu script pare de pesquisar o arquivo antes de ler sua função.

Você pode simplesmente anexar sua função a outro arquivo diferente de .bashrc e ele deve funcionar bem. Se você insistir em usar .bashrc , basta definir a variável PS1 como um valor fictício no seu script antes de obter .bashrc .

    
por Malte Skoruppa 25.03.2017 / 11:47