我正在使用 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
Run Code Online (Sandbox Code Playgroud)
......但它不起作用。特别是创建了屏幕,但不执行 ./my_command。任何提示?
首先,您想要$test而不是test在screen脚本中的行上。
-X 命令需要屏幕命令,而不是shell命令。您可以查看手册页并找出如何告诉 screen 将字符输入到正在运行的 shell 中;这可能是可能的,但我在几分钟内找不到它。(啊哈,这是屏幕“东西”命令: 从外部向屏幕会话发送输入)
或者,您可以执行以下操作:
#!/bin/bash
for i in 1 2 3
do
test="test"$i
screen -dmS $test ./my_command $i
done
Run Code Online (Sandbox Code Playgroud)
这将在一个新的屏幕窗口中运行一个空的 ./my_command $i 。
您还可以使用这样的命令行:
screen -dmS $test sh -c "ulimit 1234;./my_command $i; exec /bin/bash"
Run Code Online (Sandbox Code Playgroud)
sh -c "foobar"将导致运行一个新的 shell 并执行foobar命令。在这里,我们让它运行几个 shell 命令。final 会exec /bin/bash启动另一个 shell,因此如果 ./my_command 退出,您就不会丢失屏幕。