从 ~/.profile 获取文件时出现问题

从 ~/.profile 获取文件时出现问题

使用 Ubuntu 9.10 和 BASH_VERSION='4.0.33(1)-release'...

我有一个 bash 函数,希望能够从我的 shell 中调用它。我在这里问了一个不同的问题:

Ubuntu 登录屏幕重新加载

现在我已经修复了语法问题,新的问题是该函数未正确导出到我的 shell 环境。因此我尝试将文件从 /etc/profile.d 移动到我的主目录,现在我只是尝试从 ~/.profile 获取它,如下所示:

. $HOME/.p4c

这没有任何效果 - 该函数仍然没有导出。我如何检查它:

  • 当我打开终端并运行时,set|grep p4c我没有看到该函数的定义。
  • 如果我. $HOME/.p4c在命令行中输入,然后set|grep p4c再次运行,现在我就可以看到该函数正确导出到我的环境中。

我知道我的 ~/.profile 正在被读取,因为. $HOME/.p4c我正在导出一个环境变量,它当我第一次打开终端时,它在我的环境中定义。呃……


以下是 $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 

答案1

您是否尝试过从中获取信息,~/.bashrc而不是~/.profile

来自 Bash 手册页:

       当启动非登录 shell 的交互式 shell 时,bash
       读取并执行 /etc/bash.bashrc 和 ~/.bashrc 中的命令,如果
       这些文件存在。可以使用 --norc 选项来禁止此操作。
       --rcfile 文件选项将强制 bash 读取并执行命令
       来自文件而不是 /etc/bash.bashrc 和 ~/.bashrc。

例如,当您在 X-window 会话中运行终端时就会出现这种情况。

相关内容