Pemahaman mendalam tentang maksud 2>&1 dalam shell Linux (yang paling komprehensif pada keseluruhan rangkaian, anda akan faham selepas membacanya)

Lepaskan: 2023-08-03 16:14:33
ke hadapan
1352 orang telah melayarinya

Apa maksud 1 dan 2 dalam Linux

Dalam sistem Linux, 0 1 2 ialah deskriptor fail

Pemahaman mendalam tentang maksud 2>&1 dalam shell Linux (yang paling komprehensif pada keseluruhan rangkaian, anda akan faham selepas membacanya)

seperti yang anda boleh lihat dari jadual di atas yang biasa kita gunakan sebenarnya Ia juga boleh ditulis sebagai

echo "hello" > t.log
Salin selepas log masuk
Mengenai maksud 2>&1

Saya tidak akan pergi ke butiran tentang pengalihan input/output dalam artikel ini🎜
  • 含义:将标准错误输出重定向到标准输出
  • 符号>&是一个整体,不可分开,分开后就不是上述含义了。
    • 比如有些人可能会这么想:2是标准错误输入,1是标准输出,>是重定向符号,那么"将标准错误输出重定向到标准输出"是不是就应该写成"2>1"就行了?是这样吗?
    • 如果是尝试过,你就知道2>1的写法其实是将标准错误输出重定向到名为"1"的文件里去了
  • 写成2&>1也是不可以的

为什么2>&1要放在后面

考虑如下一条shell命令

nohup java -jar app.jar >log 2>&1 &
Salin selepas log masuk

(最后一个&表示把条命令放到后台执行,不是本文重点,不懂的可以自行Google)

为什么2>&1一定要写到>log后面,才表示标准错误输出和标准输出都定向到log中?

我们不妨把1和2都理解是一个指针,然后来看上面的语句就是这样的:

本来1----->屏幕 (1指向屏幕)
执行>log后, 1----->log (1指向log)
执行2>&1后, 2----->1 (2指向1,而1指向log,因此2也指向了log)
``
再来分析下
Salin selepas log masuk

nohup java -jar app.jar 2>&1 >log &

本来1----->屏幕 (1指向屏幕)
执行2>&1后, 2----->1 (2指向1,而1指向屏幕,因此2也指向了屏幕)
执行>log后, 1----->log (1指向log,2还是指向屏幕)
Salin selepas log masuk

所以这就不是我们想要的结果。

搜索公众号GitHub猿后台回复“打飞机”,获取一份惊喜礼包。

简单做个试验测试下上面的想法:

java代码如下:

public class Htest {
    public static void main(String[] args) {
        System.out.println("out1");
        System.err.println("error1");
    }
}
Salin selepas log masuk

javac编译后运行下面指令:

java Htest 2>&1 > log
Salin selepas log masuk

你会在终端上看到只输出了"error1",log文件中则只有"out1"

每次都写">log 2>&1"太麻烦,能简写吗?

有以下两种简写方式

&>log
>&log
Salin selepas log masuk

比如上面小节中的写法就可以简写为:

nohup java -jar app.jar &>log &
Salin selepas log masuk

上面两种方式都和">log 2>&1"一个语义。

那么 上面两种方式中&>和>&有区别吗?

语义上是没有任何区别的,但是第一中方式是最佳选择,一般使用第一种。

Atas ialah kandungan terperinci Pemahaman mendalam tentang maksud 2>&1 dalam shell Linux (yang paling komprehensif pada keseluruhan rangkaian, anda akan faham selepas membacanya). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:Linux中文社区
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan