0

我想在 host1 上打开一个屏幕并将目录更改为 $HOME/bin。host2 并将目录更改为 $HOME/prj。

这是我的脚本,但 chdir 不能工作。

#!/bin/bash

start_host() {
    screen ssh $1
    sleep 1
    screen -X chdir $2
}

[ x"$TERM" = x"screen" ] || exec screen -ln -S xxx -c /dev/null $0
sleep 1
screen -X zombie cr
screen -X caption always "%{= wk}%-w%{= BW}%n:%t%{-}%+w%-="

screen /bin/bash
start_host host1 bin
start_host host2 prj
4

2 回答 2

0

这是我尝试错误后的解决方案。

#!/bin/bash
start_host() { # <host> <dir>
  screen ssh $1
  screen -X eval "stuff 'cd $2'" "stuff \015"
  screen -X select 0
}

[ x"$TERM" = x"screen" ] || exec screen -l -c /dev/null $0 $*
screen -X caption always "%{= wk}%-w%{= BW}%n:%t%{-}%+w%-="

start_host host1 bin
start_host host2 prj
read -p "Press enter to quit all windows" a
screen -X quit
于 2012-08-23T06:18:28.657 回答
0

我想,您的问题是您启动屏幕(在 function 中start_host)而不是处于分离模式。这意味着该命令会screen ssh $1阻止该功能,并且执行过程在完成之前无法继续screen

我建议使用-d -m以分离模式启动屏幕:

start_host() {
  screen -d -m ssh $1
  sleep 1
  screen -X chdir $2
}
于 2012-06-15T14:22:47.097 回答