Надлежащий способ использовать хижину для удара

Вы пытаетесь изменить подсказку, отображенную удаленной оболочкой. Это, конечно, требует изменения конфигурационного файла удаленной оболочки, т.е. .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) и работать от комфорта окружения.

2
13.02.2012, 18:41
2 ответа

Просто необходимо удостовериться это 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). Лучшее, на которое Вы могли возможно надеяться, должно убрать среду в рамках сценария или обертки и запускающийся с ясной среды, которая не может быть тем, что Вы хотите.

4
27.01.2020, 21:55
  • 1
    Как очистить среду в рамках сценария? –  balki 14.02.2012, 08:25
  • 2
    Если Вы хотите очистить все: 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

Просто считайте немного "удара человека".

Под разделом "INVOCATION" Вы нашли бы, что "-noprofile" или "-norc" опции должен добиться цели.

2
27.01.2020, 21:55

Теги

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