首页 > 试题广场 >

bash中,需要将脚本demo.sh的标准输出和标准错误输出

[不定项选择题]
bash中,需要将脚本demo.sh的标准输出和标准错误输出重定向至文件demo.log,以下哪些用法是正确的()
  • bash demo.sh &>demo.log
  • bash demo.sh >& demo.log
  • bash demo.sh >demo.log 2>&1
  • bash demo.sh 2>demo.log 1>demo.log
http://linux-wiki.cn/wiki/zh-hans/Bash%E7%9A%84%E8%BE%93%E5%85%A5%E8%BE%93%E5%87%BA%E9%87%8D%E5%AE%9A%E5%90%91
发表于 2016-09-04 00:27:09 回复(0)
好像AC都是对的B缺少空格符
编辑于 2015-08-15 09:36:24 回复(0)
答案B也是正确的吧?
编辑于 2015-08-04 14:27:16 回复(0)

该题考察Linux下的输入/输出重定向。在Linux中,每个打开的文件被赋予一个文件描述符(file descriptor),包括标准输入(stdin),标准输出(stdout)和标准错误输出(stderr),由0,1,2分别描述。

    A选项,command &> file 表示将标准输出(stdout)和标准错误输出(stderr)重定向至指定的文件file中。 

    B选项,语法错误。正确的语法是M >& N,M和N都是文件描述符,M在不指定的情况下默认是文件描述符1。

    C选项,command > file 2>&1,是由两部分组成。首先command>file表示将标准输出(stdout)重定向到文件file中。接下来的2>&1表示将标准错误输出(stderr)输出到文件描述符1指定的位置,即标准输出(stdout)的位置,由于标准输出已经冲定向到文件file中,所以标准错误输出也会重定向到文件file中。

    D选项,command 2> file 1> file,也可看成是由两部分组成。首先command 2> file,表示将标准错误输出(stderr)重定向到文件file中;1> file,表示将标准输出(stdout)重定向到文件file中。 最终的file中不会包含标准错误输出(stderr)的信息,因为会被之后的标准输出(stdout)覆盖。



编辑于 2016-01-11 09:55:43 回复(6)
实践出真知
A结果
B结果

C结果

D结果

结果来自CentOS 6.5Final
综上所述,只有D是错误的,确实如果使用>是会覆盖掉原本标准输出内容的.
我个人理解.A将上述脚本放置后台运行,并将所有结果输出到demo.log文件
B感觉语法好像不对,具体为什么对还得请大神解释清楚
C非常常用的重定向使用方法,将2也就是错误输出也重定向到标准输出,个人认为linux判断标准与错误的时候是相当于一条自来水管一条污水管,只是蓄水池你可以分别指定.
D就如我上面举得例子,先放进去了自来水 又用污水覆盖,反之例子可能不太合适.总之是覆盖的关系
欢迎大神指点迷津
发表于 2016-06-29 15:52:47 回复(0)
cmd >a 2>a :stdout和stderr都直接送往文件 a ,a文件会被打开两遍,由此导致stdout和stderr互相覆盖。
发表于 2015-08-22 16:12:11 回复(1)

&> 等如 2>&1 , > 等如 1> ,那是缩写,

1 是 STDOUT, 2 是 STDERR, 2>&1 就是 STDOUT 和 STDERR

发表于 2018-07-30 10:45:05 回复(0)
忍头像
command &> file 
command > &  file 
bash中  这俩条命令是等价的
表示将标准输出(stdout)和标准错误输出(stderr)重定向至指定的文件file中。
发表于 2016-03-16 15:28:31 回复(1)
C
demo.sh >demo.log 是将标准输出重定向到文件中
2>&1 2是标准错误,所以这句是将标准错误重定向到标准输出
更多测试可以参考博客:http://blog.csdn.net/ithomer/article/details/9288353
编辑于 2015-07-28 11:44:36 回复(0)
A:  command &> file  和 command  >&  file 在bash中是等价的,都是把 标准输出和标准错误 重定向到fiel
B:同A
C: 1.先将1-标准输出指向文件 >demo.log  前边的1被省略了
   2. 再将2-标准错误指向1(因为1这时候已经指向了文件,因此2也指向文件) 2>&1
D:看起来D也是对的,但是2 会被 1覆盖,最终只有1的内容,所以D不对
发表于 2020-04-03 19:47:42 回复(0)
B选项好奇怪
发表于 2017-06-07 11:09:27 回复(0)

在Linux中,每个打开的文件被赋予一个文件描述符(file descriptor),包括标准输入(stdin),标准输出(stdout)和标准错误输出(stderr),由0,1,2分别描述。

    A选项,command &> file 表示将标准输出(stdout)和标准错误输出(stderr)重定向至指定的文件file中。 

    B选项,语法错误。正确的语法是M >& N,M和N都是文件描述符,M在不指定的情况下默认是文件描述符1。

    C选项,command > file 2>&1,是由两部分组成。首先command>file表示将标准输出(stdout)重定向到文件file中。接下来的2>&1表示将标准错误输出(stderr)输出到文件描述符1指定的位置,即标准输出(stdout)的位置,由于标准输出已经冲定向到文件file中,所以标准错误输出也会重定向到文件file中。

    D选项,command 2> file 1> file,也可看成是由两部分组成。首先command 2> file,表示将标准错误输出(stderr)重定向到文件file中;1> file,表示将标准输出(stdout)重定向到文件file中。 最终的file中不会包含标准错误输出(stderr)的信息,因为会被之后的标准输出(stdout)覆盖。

发表于 2018-04-10 14:04:22 回复(0)
>& filename : 将stdout , stderr 重定向到filename
2>&1 : 将 stderr 重定向到 stdout
2>filename :  将 stderr 重定向到 filename
1>filename :  将 stderr 重定向到 filename

0 stdin , 1 stdout , 2 stderr

我觉得选ACD,因为C选项把stderr 重定向到了stdout,而stdout又重定向到了filenam,因此相当与stderr 和stdout都定向到了filename
filename指的是demo.log
发表于 2015-09-01 10:55:54 回复(0)
个人记法 >& 和&>都看做后台重定向 0 标准输入 1标准输出 2标准错误输出
发表于 2022-06-25 17:04:38 回复(0)
A将上述脚本放置后台运行,并将所有结果重定向到demo.log文件,在命令后加&,放置后台的意思
把C选项拆分来看

1:标准输出
2:标准错误输出
>表示重定向
2>&1 将正确输出和错误输出都输出到文件
现在把demo.log删了,重新跑一遍完整的命令

发表于 2023-02-18 06:23:11 回复(0)

鸟哥的Linux私房菜第四版第347页,有基本一模一样的例子。

D错误的原因:由于两股数据同时写入一个文件,又没有使用特殊的语法,此时两股数据可能会交叉写入该文件中,造成时序的混乱。所以虽然最终demo.log文件会产生,但是里面的数据排列就会怪怪的,而不是原本屏幕的输出顺序。写入同一个文件的特殊语法,可以使用2>&1,也可以使用2&>1。
昨天看的书,今天还是做错了,唉

发表于 2020-07-12 15:56:33 回复(0)
可以看出 &>demo.log 和 >&demo.log 的写法都是正确的,不过更推荐前者的写法。两种写法在语义上等同于 >demo.log 2>&1。

编辑于 2019-07-13 10:21:09 回复(0)
考察数据流重定向
stdin 标准输入,代码为0,使用<或者<<
stdout标准输出,代码为1,使用>或者>>
stderr标准错误输出,代码为2,使用2>或者2>>
----------------
find /home -name .bashrc 1>  a 2> b 正确输出到a,错误输出到b
find /home -name .bashrc  > a   2>&1将正确输出和错误输出都输出到一个文件a
find /home -name .bashrc  &> a  同上
(2>&1  可以用  &> 代替)
 demo.sh>&demo.log         亲测可以,靠的很进也可以
标准输入:


发表于 2018-11-23 17:25:38 回复(0)
A和B等价
发表于 2017-06-18 22:05:44 回复(0)
在ubuntu14.04上测试的结果,b也可以。 d不行,stdout和stderr会互相覆盖
发表于 2016-04-21 10:38:34 回复(0)