Вы пытаетесь изменить подсказку, отображенную удаленной оболочкой. Это, конечно, требует изменения конфигурационного файла удаленной оболочки, т.е. .bashrc
.
Если Вы не хотите изменять файл, и действительно необходимо использовать ту общую учетную запись (вставьте обязательное ворчание об общих учетных записях), и Вы входите в систему по ssh, Вы можете (ab) использовать command=
опция в ~/.ssh/authorized_keys
файл. Ключ с опцией команды хорош только для выполнения указанной команды; но команда в authorized_keys файле работает с переменной среды SSH_ORIGINAL_COMMAND
набор к команде пользователь указал (пустой для интерактивных сессий). Таким образом, можно использовать что-то вроде этого в ~/.ssh/authorized_keys
:
command="HOME=$HOME/.HOME.lance;
if [ -n \"$SSH_ORIGINAL_COMMAND\" ]; then
eval \"$SSH_ORIGINAL_COMMAND\";
else exec \"$SHELL\"; fi" ssh-rsa AAAA…== lance@example.com
Обратите внимание, что я поместил разрывы строки выше для четкости, но это на самом деле должно быть всем на одной строке в authorized_keys
файл.
Затем поместите свои любимые конфигурационные файлы в это .HOME.lance
каталог.
Для случайного использования можно явно получить файл профиля или выполнить любую команду оболочки. Передайте -t
опция иметь терминал, если Вы хотите выполнить интерактивные команды.
ssh shared-account@server "LS_COLORS='$LS_COLORS' ls --color"
ssh -t shared-account@server '. ~/.profile.drew; exec zsh'
Если Вы только хотите отредактировать или скопировать файлы на удаленной машине, можно использовать сетевую файловую систему, такую как SSHFS (для клиентов Unix) или Бродяга (для Emacs) и работать от комфорта окружения.
Просто необходимо удостовериться это BASH_ENV
не установлен. От INVOCATION
раздел bash(1)
:
When bash is started non-interactively, to run a shell script, for example, it looks for the variable BASH_ENV in the environment, expands its value if it appears there, and uses the expanded value as the name of a file to read and execute. Bash behaves as if the following com‐ mand were executed: if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi but the value of the PATH variable is not used to search for the file name.
Другие точечные файлы (~/.bash_profile
, ~/.bash_logout
, и т.д.), читаются, когда оболочка запускается в интерактивном режиме.
К сожалению, Вы не можете управлять средой из сценария, даже с помощью #!env
(который требует только одного аргумента, в этом случае программная оболочка, bash
). Лучшее, на которое Вы могли возможно надеяться, должно убрать среду в рамках сценария или обертки и запускающийся с ясной среды, которая не может быть тем, что Вы хотите.
Просто считайте немного "удара человека".
Под разделом "INVOCATION" Вы нашли бы, что "-noprofile" или "-norc" опции должен добиться цели.
eval `env | awk -F= '!/^\t/{print "unset", $1, ";"}'`
; но Вы могли бы хотеть некоторые переменные:eval `env | awk -F= '!/^\t/&&$1!~/^(SHELL|PATH|TERMCAP|TERM|HOME|USER|LANG|DISPLAY|XAUTHORITY)$/{print "unset", $1, ";"}'`
; иначе вещи как $PATH, $DISPLAY и $TERM удалены и должны быть повторно присвоены. Некоторые программы не работают хорошо без других. – Arcege 14.02.2012, 09:14