Macos 为什么我的;at";终端中的命令不起作用?

Macos 为什么我的;at";终端中的命令不起作用?,macos,bash,command-line,terminal,Macos,Bash,Command Line,Terminal,例如,我试图在20:30使用echo“haha”|让我的命令在几分钟内执行 但命令从未执行: $ date Tue 3 Feb 2015 20:47:22 AST $ echo "test" | at 20:48 job 5 at Tue Feb 3 20:48:00 2015 $ date Tue 3 Feb 2015 20:48:05 AST 我做错了什么?您的命令: echo "test" | at 20:48 告诉atat在没有参数的情况下执行命令test。它是一个运行但失败的

例如,我试图在20:30使用
echo“haha”|
让我的命令在几分钟内执行

但命令从未执行:

$ date
Tue  3 Feb 2015 20:47:22 AST
$ echo "test" | at 20:48
job 5 at Tue Feb  3 20:48:00 2015
$ date
Tue  3 Feb 2015 20:48:05 AST
我做错了什么?

您的命令:

echo "test" | at 20:48
告诉at
at
在没有参数的情况下执行命令
test
。它是一个运行但失败的shell内置程序。尝试:

test
echo $?
它为我生成
1
,表示失败

你可能有这样的想法:

echo "echo test" | at 20:48
现在,您只需要知道输出将流向何处
/dev/null
是一个合理的猜测。因此,请尝试:

echo "echo test > /tmp/x39.214" | at 20:48
然后,当20:48(或您选择的新时间)时,查找文件
/tmp/x39.214
以包含行
test

at
命令读取一系列要执行的命令的标准输入。它们在您的环境中运行,但没有连接终端(因此,
/dev/null
是标准的输入、输出、错误-或者,如果不是,您将通过电子邮件获得输出)。因此,您的命令必须安排将其输出存储在您可以找到的位置。像
/tmp/x39.214这样的固定名称不是一个好主意,但您需要能够确定文件将放在哪里以及名称。通常,名称中会包含时间

因为
at
读取标准输入,所以您可以使用here文档或here字符串,或从文件或管道重定向标准输入,只需四种机制即可

$ echo "echo test >/tmp/x39.214" > file1.txt
$ at 20:48 < file1.txt
$ at 20:48 <<'EOF'
> echo test >/tmp/x39.214
> EOF
$ at 20:48 <<< 'echo test >/tmp/x39.214'
$ cat file1.txt | at 20:48
$
$echo“echo测试>/tmp/x39.214”>file1.txt
$at 20:48EOF
$20:48您的命令:

echo "test" | at 20:48
告诉at
at
在没有参数的情况下执行命令
test
。它是一个运行但失败的shell内置程序。尝试:

test
echo $?
它为我生成
1
,表示失败

你可能有这样的想法:

echo "echo test" | at 20:48
现在,您只需要知道输出将流向何处
/dev/null
是一个合理的猜测。因此,请尝试:

echo "echo test > /tmp/x39.214" | at 20:48
然后,当20:48(或您选择的新时间)时,查找文件
/tmp/x39.214
以包含行
test

at
命令读取一系列要执行的命令的标准输入。它们在您的环境中运行,但没有连接终端(因此,
/dev/null
是标准的输入、输出、错误-或者,如果不是,您将通过电子邮件获得输出)。因此,您的命令必须安排将其输出存储在您可以找到的位置。像
/tmp/x39.214这样的固定名称不是一个好主意,但您需要能够确定文件将放在哪里以及名称。通常,名称中会包含时间

因为
at
读取标准输入,所以您可以使用here文档或here字符串,或从文件或管道重定向标准输入,只需四种机制即可

$ echo "echo test >/tmp/x39.214" > file1.txt
$ at 20:48 < file1.txt
$ at 20:48 <<'EOF'
> echo test >/tmp/x39.214
> EOF
$ at 20:48 <<< 'echo test >/tmp/x39.214'
$ cat file1.txt | at 20:48
$
$echo“echo测试>/tmp/x39.214”>file1.txt
$at 20:48EOF

20:48美元传统用法更像:

at 20:48 <<'EOF'
echo "test" >/tmp/hello_world
EOF

在20:48常规用法更像:

at 20:48 <<'EOF'
echo "test" >/tmp/hello_world
EOF

在20:48
echo“test”
在终端工作时,为什么它会认为我正在尝试执行“test”命令?
echo“test”
只回显
test
,不是吗?这就是
at
所看到的标准输入。它根本看不到
echo
。我的印象是
at
部分只是在某个特定时间调度上一个命令。它到底在做什么?如果我在终端中写入
echo“echo test”
,它会显示“echo test”。那么,它为什么要将我想要的东西写入文件呢?它会安排上一个命令的标准输出。例如,您会从
echo“test”| cat
中得到什么?答案的
测试
(不带引号)。这就是
at
看到的输入。那里没有什么特别的魔法。您可以让一个程序生成一个巨大的shell脚本,或一个单行命令,并将该输出馈送到
at
命令。您选择了一个非常简单的单行命令。@DougSmith,它不会将输出写入终端的原因是,
at
命令调度at守护进程运行的命令,而at守护进程根本没有连接到任何终端。(当然,这也意味着您的系统必须配置为运行at守护进程——如果它不运行,
at
调度的命令将永远不会被调用)。
echo“test”
在终端中工作,但为什么它会认为我正在尝试执行“test”命令?
echo“test”
只回显
test
,不是吗?这就是
at
所看到的标准输入。它根本看不到
echo
。我的印象是
at
部分只是在某个特定时间调度上一个命令。它到底在做什么?如果我在终端中写入
echo“echo test”
,它会显示“echo test”。那么,它为什么要将我想要的东西写入文件呢?它会安排上一个命令的标准输出。例如,您会从
echo“test”| cat
中得到什么?答案的
测试
(不带引号)。这就是
at
看到的输入。那里没有什么特别的魔法。您可以让一个程序生成一个巨大的shell脚本,或一个单行命令,并将该输出馈送到
at
命令。您选择了一个非常简单的单行命令。@DougSmith,它不会将输出写入终端的原因是,
at
命令调度at守护进程运行的命令,而at守护进程根本没有连接到任何终端。(当然,这也意味着您的系统必须配置为运行at守护进程——如果它不运行,
at
调度的命令将永远不会被调用)。为什么您认为自己做错了什么<代码>atd
运行