相关疑难解决方法(0)

shell 的控制和重定向操作符是什么?

我经常在网上看到用不同符号连接各种命令的教程。例如:

command1 |  command2
command1 &  command2
command1 || command2    
command1 && command2
Run Code Online (Sandbox Code Playgroud)

其他人似乎将命令连接到文件:

command1  > file1
command1  >> file1
Run Code Online (Sandbox Code Playgroud)

这些是什么?他们叫什么?他们在做什么?还有更多吗?


关于这个问题的元线程。.

shell io-redirection control-flow

353
推荐指数
3
解决办法
17万
查看次数

2>&-, 2>/dev/null, |&, &>/dev/null 和 >/dev/null 2>&1 的区别

只是寻找之间的区别

  • 2>&-
  • 2>/dev/null
  • |&
  • &>/dev/null
  • >/dev/null 2>&1

以及它们与非的Bourne shell喜欢便携性tcshmksh等等。

shell io-redirection file-descriptors csh portability

237
推荐指数
3
解决办法
21万
查看次数

&> >& 和 2>&1 之间的重定向区别

这个 SO 线程和其他一些线程上,我看到了以下用于重定向stdoutstderr到文件的命令。

它们都是等价的吗?它们之间有什么区别吗?

command1 >> logfile 2>&1
command &> logfile
command >& logfile
Run Code Online (Sandbox Code Playgroud)

shell zsh io-redirection

14
推荐指数
1
解决办法
3万
查看次数

stderr 重定向在 csh 中不起作用

我运行以下命令:

pkg_add emacs-23.4,2.tbz 2> output.log
Run Code Online (Sandbox Code Playgroud)

输出仍然显示在终端中。当我按下时?,我得到

pkg_add emacs-23.4,2.tbz 2 > output.log
Run Code Online (Sandbox Code Playgroud)

前有一个空格2

我原来没有放这个。我试试

pkg_add emacs-23.4,2.tbz > output.log 2>&1
Run Code Online (Sandbox Code Playgroud)

同样,当我按下 时?空格已添加

为什么这会发生在我身上?

我在 FreeBSD 上运行 csh。

command-line freebsd io-redirection csh

13
推荐指数
2
解决办法
3万
查看次数

tcsh 和其他 shell 之间的 stderr 重定向不一致

我在 tcsh 中遇到重定向问题。

考虑以下命令:vi --versionvi --xxx。让我们假设这是在vi支持该--version选项的机器上。该选项--xxx无效,因此vim应通过stderr.

根据这个推理,2> /dev/null与这两个命令一起使用应该给出有效情况的输出,而无效情况则没有输出。

就是我在 bash、zsh、ksh 和 dash 中看到的。

$ vi --xxx 2> /dev/null
$ vi --version 2> /dev/null
VIM - Vi IMproved 7.4 (2013 Aug 10, compiled Oct 20 2014 16:09:17)
...
Run Code Online (Sandbox Code Playgroud)

但是,当我在 tcsh 中尝试此操作时,在这两种情况下没有输出

$ vi --xxx 2> /dev/null
$ vi --version 2> /dev/null
(there is no output here)
Run Code Online (Sandbox Code Playgroud)

这里发生了什么?我重定向stderr …

tcsh io-redirection stderr

9
推荐指数
1
解决办法
1万
查看次数