script bash que não cria alias e não atualiza $ PS1 [duplicado]

0

Eu pensei em escrever um script bash para definir o alias que eu uso com frequência e também para alterar o comando promt.

Abaixo está o meu script.

#!/bin/bash
# Make useful aliases
alias c='clear'
alias p='pwd'
alias d='pwd'
alias l='ls -l'
alias clp='clear;pwd'
# Prompt
PS1='unix % '
# Echo to check if script runing
echo 'Hello world'

Mas quando executo este script (depois de dar permissão de execução), o alias não é adicionado. O prompt também não é atualizado com o valor fornecido para PS1. No entanto, ecoa Hello world , então parece que o script está sendo executado.

user $ ./myEnv.sh 
Hello world
user $ d
d: command not found
user $

Onde está o erro?

    
por sps 09.10.2015 / 10:43

3 respostas

3

Fácil o script criou essas variáveis em seu próprio ambiente. Então, ao sair, esse ambiente específico é destruído e você retorna ao ambiente do shell pai, onde essas variáveis não estão definidas como você deseja.

Em vez de executá-lo, você deve usar como . myEnv.sh

    
por 09.10.2015 / 10:46
2

O script criará o alias em sua própria instância. O alias não estará disponível em outra instância ou na instância pai bash. Além disso, o prompt é alterado apenas nessa instância específica do bash.

    
por 09.10.2015 / 10:50
2

Como outros já disseram, você deve criar um script se quiser que coisas como aliases e variáveis de ambiente alteradas tenham efeito.

No entanto, a desvantagem disso é que, embora você possa executar um script em seu caminho, não é possível criar um script dessa maneira; Isso significaria que toda vez que você quiser incluir seus aliases, precisará especificar um caminho completo. Isso pode ser um pouco chato.

Para evitar isso, você precisará usar ~/.bashrc . Na inicialização, quando executado de forma interativa, o bash shell fornecerá esse arquivo automaticamente , portanto, se você definir seus aliases nesse arquivo, eles estarão disponíveis em todos os shells (recém-iniciados) daquele ponto em diante.

Se você não quiser que os aliases estejam sempre disponíveis, crie uma função em ~/.bashrc :

addaliases() {
    alias c='clear'
    alias p='pwd'
    # ... and so on
}

Agora, da próxima vez que você começar o bash, você pode executar addaliases a partir da linha de comando e, em seguida, os aliases serão adicionados.

Se você não usa bash mas usa algum outro shell, então obviamente você não deve colocar isto em ~/.bashrc , mas em outro arquivo; qual deles depende exatamente do shell exato que você está usando.

    
por 09.10.2015 / 11:33