1

Сценарий bash/screen :

screen -dmS sessionname -c /path/to/screenrc

/path/to/screenrc содержит, например,

screen -t windowtitle1 bash --init-file /path/to/window1.bashinit
screen -t windowtitle2 bash --init-file /path/to/window2.bashinit
screen -t windowtitle3 bash --init-file /path/to/window3.bashinit

например это

  • запускает сеанс screen в отдельном режиме
  • screen выполняет определенный screenrc
  • с screenrc
    • запускает 3 разных интерактивных окна bash
    • и каждый bash выполняет содержимое определенного init-file
    • и после их выполнения bash продолжится в интерактивном режиме (!)

Итак, в конце я получил

  • отдельный сеанс screen
  • с 3х запущенным bash в интерактивном режиме
  • и каждая из них уже выполнила несколько команд (определенных в их init-file)

Как добиться такой же функциональности с помощью tcsh?

2 ответа2

2

Вам не нужно заставлять tcsh выполнять ту работу, которую screen может сделать для вас. Просто запустите ваши 3 окна:

cat <<\! >/path/to/screenrc
screen -t windowtitle1 tcsh
screen -t windowtitle2 tcsh
screen -t windowtitle3 tcsh
!
screen -dmS sessionname -c /path/to/screenrc

затем вставьте (то есть "type") команду init в каждое окно:

screen -p windowtitle1 -X stuff 'source /path/to/window1.tcshinit\n'
screen -p windowtitle2 -X stuff 'source /path/to/window2.tcshinit\n'
screen -p windowtitle3 -X stuff 'source /path/to/window3.tcshinit\n'
1

Насколько я знаю, вы не можете, во всяком случае, не напрямую.

Что вы можете сделать, это создать win1.tcsh , win2.tcsh и т.д. С содержанием:

echo Starting win1
setenv WINDOW 1
exec tcsh

Вызовите это как tcsh -c 'source win1.tcsh' , и в вашем tcshrc сделайте что-то вроде:

if ( $WINDOW == "1" ); then
   # My custom commands...
endif

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