Как добавить, что корневой каталог соединяет каналом, чтобы быть обнаруженным Unix, которые управляют?

Я определяю свой 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 $
12
23.09.2017, 09:37
2 ответа

Это происходит потому что ~ не был расширен. Ваша оболочка знает, как иметь дело с этим, но 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.

11
27.01.2020, 19:54
  • 1
    В то время как предлагаемое решение действительно работает, объяснение является неправильным. which не виновным здесь; ~ должен был быть расширен в определении PATH. Существует причуда в ударе, который она разворачивает ~ так или иначе в PATH, таким образом, два заблуждения делают право, отчасти. –  Gilles 'SO- stop being evil' 29.11.2011, 23:57
  • 2
    @Gilles, Как это отличается от того, что я сказал? –  Chris Down 30.11.2011, 01:09
  • 3
    То, что это работает вообще с заключенным в кавычки ~ причуда удара. Наличие того литерала ~ в $PATH вероятно, доставит неприятности по линии, потому что существуют программы, которые делают их собственное разделение $PATH и они не рассматривают ~ особенно. –  Gilles 'SO- stop being evil' 30.11.2011, 01:14
  • 4
    @Gilles... и как это отличается от того, что я сказал в своем заключительном абзаце? –  Chris Down 30.11.2011, 01:37
  • 5
    , В то время как это технически верно, что “некоторая другая программа … не может понять значение ~”, Ваше предложение вводит в заблуждение. В контексте $PATH, это - каждая программа кроме удара. –  Gilles 'SO- stop being evil' 30.11.2011, 03:07

Та строка в Вашем .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 содержит пробелы.

18
27.01.2020, 19:54

Теги

Похожие вопросы