Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 从另一个窗口在一个终端窗口中执行脚本_Bash_Terminal_Gnu Screen - Fatal编程技术网

Bash 从另一个窗口在一个终端窗口中执行脚本

Bash 从另一个窗口在一个终端窗口中执行脚本,bash,terminal,gnu-screen,Bash,Terminal,Gnu Screen,我正在使用screen在终端窗口内创建多个外壳。 如果我在一个shell中执行脚本,并使用ctrl+a c创建一个新屏幕,那么在创建屏幕后,第一个shell中当前执行的脚本是否会向新创建的shell屏幕发出命令 例如,我有一个脚本: #!/bin/bash while read line do echo $line; for x in {a..d} do bash t.sh $line/x$x xdotool key ctrl+a c done done < files

我正在使用
screen
在终端窗口内创建多个外壳。 如果我在一个shell中执行脚本,并使用
ctrl+a c
创建一个新屏幕,那么在创建屏幕后,第一个shell中当前执行的脚本是否会向新创建的shell屏幕发出命令

例如,我有一个脚本:

#!/bin/bash
while read line
do
echo $line;
for x in {a..d}
do
    bash t.sh $line/x$x 
    xdotool key ctrl+a c
done
done < files
#/bin/bash
读行时
做
回声线;
对于{a..d}中的x
做
bash t.sh$line/x$x
xdool键ctrl+a c
完成
已完成<个文件
文件
文件包含包含数据文件的文件夹名称

现在执行此脚本时,执行脚本
t.sh
,然后创建一个新屏幕并继续循环。 现在,最后我得到了4个屏幕shell,但是脚本
t.sh
仅在第一个shell中执行了4次。 因此,我需要在4个shell中分别执行脚本
t.sh


(另请注意:我的基本要求是我有一个132核的CPU,并且希望单独执行一个脚本132次,并跟踪每次执行的输出。)

要直接回答您的问题,您可以使用从一个
屏幕
窗口向另一个屏幕发出命令,该命令可以通过
屏幕-X
调用


不过,您的情况更简单:只需调用
screen bash t.sh$line/x$x
即可,而不是发出
ctrl+a c
键。默认情况下,从
屏幕
会话中调用
屏幕
(除非清除了
$STY
环境变量)。

是否确实要从其他终端执行脚本?如果只是为了便于监控,可以执行以下操作:

# my other terminal where I want to see the output:
$ tty
/dev/pts/xx  #<~~~~ note this tty device number

# my main terminal:
$ bash t.sh $line/x$x </dev/pts/xx >/dev/pts/xx 2>&1
#我想要查看输出的另一个终端:
$tty
/dev/pts/xx#&1

谢谢您的回复,杰夫。但是这个命令返回的是
必须连接到终端。
错误。经过几次尝试,我无法重现这个问题。你能分享足够多我可以复制的东西吗?我刚刚用上面提到的代码中的
screen bash t.sh$line/x$x
行替换了
bash t.sh$line/x$x
。谢谢你的回复@anishsane。根据您的解决方案,脚本基本上是在主终端中执行的,但其输出将被传输到其他终端。但我需要的是将整个执行转移到另一个终端。stdin、stdout、stderr都被转移。其他环境不被转移。通常,这是我需要的。但你的要求可能会有所不同。