在linux上的stderr上打印错误消息

在linux上的stderr上打印错误消息,linux,shell,Linux,Shell,所以我已经读了好几遍关于stdout、stdin和stderr的书。这听起来是一个非常简单的概念,但我不知道为什么我还不能掌握它 嗯,我正在写作业脚本。部分原因是它至少需要两个论点。如果少于两个参数,则应在stderr上打印错误,否则应将所有文件的内容打印到stdout。(现在让我们假设所有文件都是文本文件,我还不想处理这个问题) 所以在阅读了Linux Pocket guide之后,我对如何开始有了一个想法 #!/bin/bash if[$# -lt 2] then echo $0

所以我已经读了好几遍关于stdout、stdin和stderr的书。这听起来是一个非常简单的概念,但我不知道为什么我还不能掌握它

嗯,我正在写作业脚本。部分原因是它至少需要两个论点。如果少于两个参数,则应在stderr上打印错误,否则应将所有文件的内容打印到stdout。(现在让我们假设所有文件都是文本文件,我还不想处理这个问题)

所以在阅读了Linux Pocket guide之后,我对如何开始有了一个想法

#!/bin/bash

if[$# -lt 2]
then
    echo $0 error: you must supply two arguments"
else
//stuff
fi
我的第一个问题是,代码行:

echo $0 error: you must supply two arguments"
这是否满足“应该在stderr上打印错误”的要求

另外,作业要求我说出参数a1、a2、a3……等等。我如何命名这个论点

最后,我如何把所有的东西放在一起,换句话说,我如何连接文件并打印它们

echo$0

表示打印文件名。您没有将输出定向到任何地方

例如:

#!/bin/bash
echo "name stdout: $0"
echo "name stderr: $0" >&2
&1
是指向标准输出的指针。无法提供,这是默认设置
&2
是指向stderr的指针

为了证明这一点,运行此脚本并将脚本stderr输出重定向到/dev/null。 如果您没有看到输出,那么您就知道回音在stderr中

$ sh test.sh
  name stdout: test.sh
  name stderr: test.sh
$ sh test.sh 2>/dev/null #2 is stderror, redirect it to /dev/null
  name stdout: test.sh
$

对不起,这对我来说毫无意义。我是初学者,你仍然可以接受我的答案,因为它是正确的,与你在这里接受的答案相同: