2

Я хочу создать новый экземпляр tcsh и создать произвольный скрипт, и все это за один шаг. Проблема в том, что когда я использую опцию -c , экземпляр оболочки закрывается, как только сценарий завершен. Итак, в следующем тривиальном примере команда pushd успешно завершается, но затем оболочка завершается:

tcsh -c "pushd ~/some/directory/of/interest"

Как я могу получить сценарий, который изменяет среду, а затем интерактивно работать в этой среде? Это наиболее полезно при использовании в сочетании с такими программами, как ssh или screen , как показано ниже:

ssh -t user@host 'tcsh -c "source ~/test_environment.csh"'

2 ответа2

4

Наше решение будет включать два этапа.

  1. Передайте переменную окружения, содержащую путь к скрипту, который вы хотите использовать в новом экземпляре tcsh .
  2. У источника tcsh скрипт, на который указывает эта переменная окружения

Для шага 1 ssh запустит команду, указанную вами в командной оболочке по умолчанию (ту, которая находится в целевом сервере /etc/passwd), поэтому я дам вам несколько решений для этого.

  • Если целевой оболочкой является sh/bash: подключитесь к ssh-серверу с помощью команды: ssh -t user@host 'export SOURCESCRIPT=/tmp/tmp.sh; exec /usr/bin/tcsh'
  • Если целевой оболочкой является csh/tcsh: подключитесь к ssh-серверу с помощью команды: ssh -t user@host 'setenv SOURCESCRIPT /tmp/tmp.sh; exec /usr/bin/tcsh'
  • Если вы можете изменить конфигурацию сервера назначения ssh, добавьте /измените параметр AcceptEnv в /etc/ssh/sshd_config чтобы разрешить передачу переменной среды SOURCESCRIPT (например, AcceptEnv SOURCESCRIPT), установите SOURCESCRIPT в локальной среде и подключитесь с помощью команды: ssh -t -o SendEnv=SOURCESCRIPT user@host 'exec /usr/bin/tcsh'

На шаге 2 мы модифицируем ~/.tcshrc добавив следующее:

if $?SOURCESCRIPT then
    source $SOURCESCRIPT
endif
-1

Поправьте меня, если я ошибаюсь, но вы не можете использовать опцию '-m' для tcsh, чтобы загрузить скрипт запуска? Я только что прочитал справочную страницу и подумал, что вы можете сделать файл ~/.tcshrc символической ссылкой на другой скрипт. В случае, если с командами что-то происходит, возможно, вы можете попробовать опции '-e' или '-m'.

Надеюсь это поможет!

РЕДАКТИРОВАТЬ: Или, возможно, вы могли бы использовать параметр -i для интерактивного в сочетании с параметром -c :)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .