登录GUI时,Tilde扩展不起作用

时间:2011-12-09 05:29:15

标签: bash .profile tilde-expansion

我正在使用Ubuntu 11.10而且我遇到了一个奇怪的问题。

我的.profile文件中有一些导出:
export ANDROID_SDK_ROOT =〜/ workspace / android-sdk-linux_x86
export ANDROID_NDK_ROOT =〜/ workspace / android-ndk-r7
等...

然而,当我登录到GUI时,打开我的终端并回显$ ANDROID_SDK_ROOT,它显示〜/ workspace / android-sdk-linux_x86而不是/home/brian/workspace/android-sdk-linux_x86.

因为它显示了〜/ workspace / android-sdk-linux_x86,所以在登录GUI时似乎会读取.profile,但我不确定为什么代字号没有扩展。

如果我在终端中运行“.~ / .profile”并检查echo $ ANDROID_SDK_ROOT,它会显示/ home / brian / workspace / android-sdk-linux_x86。这很奇怪,我不知道为什么。

如果我登录CUI(命令用户界面),当我回显$ ANDROID_SDK_ROOT时,它按预期打印/ home / brian / workspace / android-sdk-linux_x86。所以问题只发生在我登录GUI时。

有没有人知道发生了什么?我在我的主目录中没有.bash_profile(我在某处读到如果我有.bash_profile,.profile没有被读取,所以我确定.bash_profile不存在;我很确定.profile被读取因为它打印〜/ workspace / android-sdk-linux_x86当我回复$ ANDROID_SDK_ROOT时)。如果你知道我可能做错了什么,请说清楚。

谢谢!

2 个答案:

答案 0 :(得分:2)

在某些情况下(取决于shell),~可能只在单词的开头展开。您可以使用$HOME来解决此问题:

export ANDROID_SDK_ROOT=$HOME/workspace/android-sdk-linux_x86
export ANDROID_NDK_ROOT=$HOME/workspace/android-ndk-r7

(请注意,这不仅适用于~username语法,只是~扩展到您自己的主目录。)

特别是,bash确实会在此上下文中展开~,但dash不会。在Ubuntu上,/bin/shdash的符号链接; /bin/sh是默认用于许多非交互活动的shell。

答案 1 :(得分:1)

使用带有 export 的代字号扩展是依赖于shell的(因为某些shell不会将导出命令中的赋值限定为 shell变量赋值)。因此,最好将其重写为:

ANDROID_SDK_ROOT=~/workspace/android-sdk-linux_x86
export ANDROID_SDK_ROOT
ANDROID_NDK_ROOT=~/workspace/android-ndk-r7
export ANDROID_NDK_ROOT