Arquivo de fonte de problemas de ~ / .profile

2

Usando o Ubuntu 9.10 e BASH_VERSION = '4.0.33 (1) -release' ...

Eu tenho uma função bash que eu quero ser capaz de chamar do meu shell. Eu fiz uma pergunta diferente sobre isso aqui:

Recarregamentos da tela de login do Ubuntu

Portanto, agora que corrigi os problemas de sintaxe, o novo problema é que a função não está sendo exportada corretamente para o meu ambiente de shell . Então, tentei mover o arquivo de /etc/profile.d para meu diretório home e agora estou tentando obtê-lo de ~ / .profile, desta forma:

. $HOME/.p4c

Isso não tem efeito algum - a função ainda não é exportada. Como estou verificando isso:

  • Quando abro um terminal e executo set|grep p4c , não vejo essa função definida.
  • Se, em seguida, eu digitar . $HOME/.p4c na linha de comando e, em seguida, executar set|grep p4c novamente, agora poderei ver a função exportada adequadamente para o meu ambiente.

Eu sei que meu ~ / .profile está sendo lido, porque imediatamente acima de . $HOME/.p4c estou exportando uma variável env e é definida em meu ambiente quando abro um terminal pela primeira vez. Ugh ...

Aqui está o conteúdo de $ HOME / .p4c:

# p4c() function setup params
p4_HOST='hostname | awk -F . '{print $1}''

# function for setting the P4CLIENT variable based on the first non-option
# argument provided
p4c() {
    HELP_MODE=''
    VERBOSE_MODE=''
    DESC_MODE=''
    SHORT_MODE=''
    while getopts ":hdsv" option
    do
        case $option in
            h) echo "p4c provides information about perforce clients."
               echo "Recognized arguments:"
               echo "    -h     help (this message)"
               echo "    -d     descriptions (prints client descriptions - usefu                                                            l, but slightly slower)"
               echo "    -v     verbose (print unreasonable amounts of debugging                                                             info"
               echo
               # About to exit - reset OPTIND or we'll be in trouble later.
               OPTIND=1
               # Abort
               return
               ;;
            v) VERBOSE_MODE='verbose';;
            d) DESC_MODE='descriptions';;
            s) SHORT_MODE='short';;
            *) echo "Unknown option '$OPTARG'!  Specify -h for help..."
               # About to exit - reset OPTIND or we'll be in trouble later.
               OPTIND=1
               # Abort
               return
               ;;
        esac
    done

    # Set argument pointer to first non-option argument
    shift $(($OPTIND - 1))

    # Done with OPTIND - better reset it before something bad happens...
    OPTIND=1

    PROJECT=$1;
    if [ $VERBOSE_MODE ]
    then
        echo "PROJECT: $PROJECT"
    fi

    # Need to check/set p4_USER every time to allow changes between invocations
    if [ -z "$p4c_USER" ]
    then
        p4_USER='echo $P4USER'
        if [ -z "$p4_USER" ]
        then
            p4_USER='id -nu'
        fi
    else
        p4_USER=$p4c_USER
    fi
    if [ $VERBOSE_MODE ]
    then
        echo "p4_USER: $p4_USER"
    fi


    if [ -n "$PROJECT" ]
    then
        # provided a non empty string project name
        p4_CLIENT=$p4_HOST-$p4_USER-$PROJECT
        if [ $VERBOSE_MODE ]
        then
            echo "p4_CLIENT: $p4_CLIENT"
        fi

        # check client to see if it exists
        p4_GREP_RESULT='p4 clients | grep "$p4_CLIENT"'
        if [ -z "$p4_GREP_RESULT" ]
        then
            echo "NOTE: P4 client \"$p4_CLIENT\" does not exist on server."
            echo "Setting P4CLIENT anyway so that client 
    
por AJ. 08.02.2010 / 17:31

1 resposta

1

Você tentou fazer o sourcing em ~/.bashrc em vez de ~/.profile ?

Na página do manual do Bash:

       When  an  interactive  shell that is not a login shell is started, bash
       reads and executes commands from  /etc/bash.bashrc  and  ~/.bashrc,  if
       these  files  exist.  This may be inhibited by using the --norc option.
       The --rcfile file option will force bash to read and  execute  commands
       from file instead of /etc/bash.bashrc and ~/.bashrc.

Qual seria o caso quando você executa um terminal em uma sessão X-window, por exemplo.

    
por 08.02.2010 / 19:24