我通过 cron 运行 screen 命令,其中代码位于lorem.sh
文件中。
这是 cron 代码:* * * * * cd /home/z; ./lorem.sh
里面lorem.sh
:
screen -S screenname -X stuff $'\033[B'
sleep 1 && screen -S screenname -X stuff 2
sleep 1 && screen -S screenname -X stuff "lorem ipsum dolor"
sleep 1 && screen -S screenname -X stuff $'\n'
上面的lorem.sh
代码:第一行是“向下箭头”,第四行是“Enter”
当运行lorem.sh
cron 时,只有第二行和第三行工作。
lorem.sh
如果通过键入从终端运行,上述操作可以正常工作./lorem.sh
,但不能通过 cron 运行。
答案1
大多数版本的cron
运行命令/bin/sh
默认使用,并且如果命令运行任何 shell 脚本(没有行#!
强制使用特定 shell),/bin/sh
也将用于运行它们。
在某些系统上,/bin/sh
是dash
,一个不理解ANSI-C 引用约定bash
和其他 shell使用。所以你的$'\n'
字符串可能被解释为 3-character string $\n
。
大多数版本cron
都允许您指定一个 shell 来运行命令。您可以bash
通过编辑 crontab 添加一行来使用它
SHELL=/bin/bash
它出现在任何安排作业的行之前。
或者,您可以通过添加来lorem.sh
始终使用bash
#!/bin/bash
作为它的第一行。