Расширение тильды не работает, когда я вошел в GUI - PullRequest
2 голосов
/ 09 декабря 2011

Я использую Ubuntu 11.10, и у меня странная проблема.

У меня есть несколько экспортов в моем файле .profile:экспорт ANDROID_SDK_ROOT = ~ / рабочая область / android-sdk-linux_x86экспорт ANDROID_NDK_ROOT = ~ / рабочая область / android-ndk-r7и т.д. ...

Однако, когда я вхожу в GUI, открываю свой терминал и выполняю echo $ ANDROID_SDK_ROOT, он показывает ~ / workspace / android-sdk-linux_x86 вместо / home / brian / workspace / android-sdk-linux_x86.

Поскольку он показывает ~ / workspace / android-sdk-linux_x86, похоже, что .profile читается при входе в GUI, но я не уверен, почему тильда не раскрыта.

Если я запускаю «. ~ / .Profile» в терминале и проверяю echo $ ANDROID_SDK_ROOT, он показывает / home / brian / workspace / android-sdk-linux_x86 в порядке.Это довольно странно, и я не уверен почему.

Если я вхожу в CUI (командный пользовательский интерфейс), когда я выполняю echo $ 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 ]

2 голосов
/ 09 декабря 2011

В некоторых случаях (в зависимости от оболочки), ~ может быть расширен только в начале слова.Вы можете обойти это, используя $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/sh является символической ссылкой на dash;/bin/sh - это оболочка, используемая по умолчанию для множества неинтерактивных действий.

1 голос
/ 09 декабря 2011

Использование расширения тильды с export зависит от оболочки (поскольку некоторые оболочки не определяют назначение в команде экспорта как назначение переменной оболочки ). Таким образом, лучше переписать его как:

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