Я определяю свой PS1 как это:
PS1='\n\u@\h \w\n(\\$\\$='$$') \! \$ '
Таким образом, моя подсказка похожа на это
...output of last command
glennj@machine ~
($$=29608) 1403 $
с предыдущей пустой строкой. Таким образом, если там производится без запаздывающей новой строки, это все еще видимо:
glennj@auds916 ~
($$=29608) 1403 $ printf hello
hello
glennj@auds916 ~
($$=29608) 1404 $
Это происходит потому что ~
не был расширен. Ваша оболочка знает, как иметь дело с этим, но which
не делает (ни был бы большинство других программ). Вместо этого сделайте:
export "PATH+=:$HOME/Unix/homebrew/bin"
С другой стороны, прекратите использовать which
, и используйте (почти всегда выше) type -p
.
Вот демонстрация проблемы:
$ echo "$PATH"
/usr/local/bin:/usr/bin:/bin
$ export "PATH+=:~/git/yturl"
$ yturl
Usage: yturl id [itag ...]
$ which yturl
$ type -p yturl
/home/chris/git/yturl/yturl
$ export "PATH=/usr/local/bin:/usr/bin:/bin:$HOME/git/yturl"
$ which yturl
/home/chris/git/yturl/yturl
Примите во внимание что некоторые другие программы тот взгляд на $PATH
может не понять значение ~
также, и возьмите его в качестве части относительного пути. Это более портативно для использования $HOME
.
Та строка в Вашем .profile
должен быть один из
export PATH="$PATH:$HOME/Unix/homebrew/bin"
PATH="$PATH:$HOME/Unix/homebrew/bin"
PATH=$PATH:$HOME/Unix/homebrew/bin
PATH=$PATH:~/Unix/homebrew/bin
~
символ только расширен до Вашего корневого каталога, когда это - первый символ слова, и он закрыл кавычки. В том, что Вы записали, ~
между двойными кавычками и поэтому не расширен. Даже если Вы записали export "PATH=$PATH:"~/Unix/homebrew/bin
, ~
не был бы расширен, потому что это не в начале слова оболочки.
Существует специальное разрешение, которое предназначается для записи значений для PATH
и подобные переменные. Если ~
сразу после знака "равно", который отмечает присвоение, или если ~
сразу после a :
в правой стороне присвоения затем это расширено. Только простые присвоения имеют это разрешение, export PATH=…
не рассчитывает (это - вызов к export
встроенный, который, оказывается, имеет аргумент, который содержит a =
символ).
Здесь, Вы не должны экспортировать PATH
потому что это уже экспортировано. Вы не должны звонить export
когда Вы измените значение переменной (кроме старых Оболочек Bourne, которые Вы не найдете на OSX или Linux). Кроме того, в присвоении (снова, export
не рассчитывает), Вам не нужны двойные кавычки вокруг правой стороны, таким образом, PATH=$PATH:~/Unix/homebrew/bin
безопасно даже если $PATH
содержит пробелы.
which
не виновным здесь;~
должен был быть расширен в определенииPATH
. Существует причуда в ударе, который она разворачивает~
так или иначе вPATH
, таким образом, два заблуждения делают право, отчасти. – Gilles 'SO- stop being evil' 29.11.2011, 23:57~
причуда удара. Наличие того литерала~
в$PATH
вероятно, доставит неприятности по линии, потому что существуют программы, которые делают их собственное разделение$PATH
и они не рассматривают~
особенно. – Gilles 'SO- stop being evil' 30.11.2011, 01:14~
”, Ваше предложение вводит в заблуждение. В контексте$PATH
, это - каждая программа кроме удара. – Gilles 'SO- stop being evil' 30.11.2011, 03:07