我正在使用 bash 脚本,我需要创建一个屏幕,执行具有内存限制的特定命令并分离屏幕。
我一直在尝试类似的事情:
#!/bin/bash
for i in 1 2 3 4 5 6 7
do
test="test"$i
screen -dmS test
screen -r test -X ulimit -v 2199552
screen -r test -X ./my_command $i
done
...但这不起作用。特别是,屏幕已创建,但 ./my_command 未执行。有什么提示吗?
答案1
首先,你想要的$test
不是剧本中的台词 test
。screen
-X 命令正在等待屏幕命令,不壳命令。您可以查看手册页并找出如何告诉 screen 将字符输入到正在运行的 shell 中;这可能是可能的,但我在几分钟内找不到它。 (啊哈,这是屏幕“stuff”命令: 从外部将输入发送到屏幕会话)
或者,你也可以这样做:
#!/bin/bash
for i in 1 2 3
do
test="test"$i
screen -dmS $test ./my_command $i
done
它将在新的屏幕窗口中运行裸露的 ./my_command $i 。
您还可以使用这样的命令行:
screen -dmS $test sh -c "ulimit 1234;./my_command $i; exec /bin/bash"
sh -c "foobar"
将导致运行一个新的 shell 并执行该foobar
命令。这里我们让它运行几个 shell 命令。最后一个exec /bin/bash
启动另一个 shell,这样如果 ./my_command 退出,您就不会丢失屏幕。