Итак, основываясь на одном из ваших комментариев, вы действительно хотите знать, как определить, какую оболочку вы используете; вы предположили, что $0
было решением, и спросили об этом, но, как вы видели, $0
не будет достоверно сообщать вам то, что вам нужно знать.
Если вы используете bash, то будет установлено несколько неэкспортированных переменных, включая $BASH_VERSION
. Если вы используете tcsh, то будут установлены переменные оболочки $tcsh
и $version
. (Обратите внимание, что $version
является чрезмерно общим именем; я столкнулся с проблемами, когда некоторые общесистемные сценарии запуска устанавливают его и блокируют переменную, специфичную для tcsh. Но $tcsh
должен быть надежным.)
Однако настоящая проблема заключается в том, что синтаксис bash и tcsh в основном несовместим. Может быть возможно написать сценарий, который может выполняться при вызове (через .
или source
) из tcsh или bash, но это будет сложно и безобразно.
Обычный подход состоит в том, чтобы иметь отдельные установочные файлы, по одному для каждой используемой оболочки. Например, если вы используете bash, вы можете запустить
. ~/setup.bash
или
. ~/setup.sh
и если вы используете tcsh, вы можете запустить
source ~/setup.tcsh
или
source ~/setup.csh
Версии .sh
или .csh
относятся к предкам обеих оболочек; имеет смысл использовать эти суффиксы, если вы не используете какие-либо специфичные для bash или tcsh функции.
Но для этого нужно знать, какую оболочку вы используете.
Возможно, вы могли бы создать псевдоним в вашем .cshrc
, .tcshrc, or
.login , and an alias or function in your
.profile ,
.bash_profile , or
.bashrc`, который будет вызывать любой скрипт, который вам нужен.
Или, если вы хотите выполнять настройку при каждом входе в систему или при каждом запуске новой интерактивной оболочки, вы можете поместить команды непосредственно в соответствующий файл (ы) запуска оболочки. Конечно, команды будут отличаться для tcsh
против bash
.