ответ Джорданма неверен. /etc/profile
поставляется не всеми оболочками. Как вы указываете, это не источником csh
, tcsh
- я не уверен в этом zsh
. Он поставляется производными Bourne shell ( sh
), такими как Korn Shell ( ksh
) и BASH ( bash
). csh
использует /etc/login
. Люди, которые склонны использовать исключительно производные Borne Shell, склонны забывать о существовании других оболочек. Они добавляют что-то, /etc/profile
ожидая, что это применимо ко «всем пользователям», и затем удивляются, когда у нечетного пользователя C Shell (а у нас странный лот) нет того материала, в котором он настроен /etc/profile
.
Тем не менее, люди склонны забывать о существовании других производных оболочек Borne Shell. Если они используют bash
или ksh
, они могут свободно добавлять синтаксис, /etc/profile
который недопустим в Bourne Shell, как, например, определение переменной и ее экспорт в той же строке. Затем вы получаете некоторый скрипт, который делает, #!/bin/sh
и он задыхается от синтаксиса. /etc/profile
следует придерживаться синтаксиса, совместимого с Bourne Shell.
Точно так же вы должны придерживаться его по своему усмотрению .profile
(используйте, .bash_profile
если вам нужен некоторый синтаксис bash) - это может быть немного дополнительная печать, но это дополнительная печать, которую вы делаете все один раз. Ссылка, ${HOME}
а не ~
и т. Д. Некоторые версии Unix, cron-задания выполняются sh
, каждая ваша строка Makefile
обрабатывается sh
, поэтому, если вы работаете с несколькими версиями UNIX, то стоит поддерживать .profile
совместимость оболочки Bourne. Как системный администратор, я не могу сказать вам, сколько раз я помогал кому-то, настраивая его .profile
на совместимость с Bourne Shell.
В Linux /bin/sh
это ссылка на /bin/bash
нее, и когда вы ее запускаете, она выглядит как путь, который использовался для ее запуска, и (теоретически) ограничивается только тем, что поддерживает Bourne Shell. Аналогично, vi
в Linux действительно vim
, опять же, ограничивает себя. Изредка вы видите особенности «прокачки». Время от времени vim
притворяется, что vi
делает что-то, vim
что vi
не поддерживает, потому что авторы vim
забыли отключить это в режиме «обратной совместимости vi». Я не удивлюсь, если у bash
притворства будут sh
какие-то схожие черты. Не удивлюсь, если какая-то функция «работает в Borne Shell в Linux», но не в UNIX на базе System V или BSD (AIX, OpenBSD и т. Д.).
Does it have positive ... and understood.
Что ты здесь пытаешься сказать? Я понял все, кроме этого пункта.