linux环境下运行脚本时常用>/dev/null 2>&1 &这一串的作用

  • Post author:
  • Post category:linux




前言

大雨哗哗哗,叫车无人接,把最近用到的命令总结一下,方便日后的拿来主义。



>/dev/null 2>&1


>/dev/null 2>&1 &

是一个常见的 Shell 命令行用法,用于在 Linux 或类 Unix 系统上运行一个程序并将其输出(标准输出和标准错误输出)重定向到

/dev/null

,同时将程序在后台(background)运行。

接下来可以逐步解释下各部分的作用:


  • >

    :重定向符号,用于将输出重定向到指定的文件或设备。


  • /dev/null

    :在 Unix 系统上,

    /dev/null

    是一个特殊的设备文件,它会将所有写入它的内容都丢弃,相当于一个空黑洞。将输出重定向到

    /dev/null

    就意味着将输出丢弃,不会显示在终端或记录到文件中。


  • 2>

    :重定向标准错误输出的符号。

    2

    表示标准错误流,也称为文件描述符 2。


  • &1

    :将标准错误输出重定向到标准输出的符号。

    &1

    表示文件描述符 1,而标准输出的文件描述符也是 1。这样,就将标准错误输出和标准输出合并到一起,都重定向到了

    /dev/null


  • &

    :在命令行中,

    &

    符号用于将命令置于后台运行,使得当前终端可以继续输入其他命令,而不需要等待前台命令的完成。

综合起来,

>/dev/null 2>&1 &

的作用是将某个程序在后台运行,并将其标准输出和标准错误输出都丢弃,不在终端中显示或记录。这样做常常用于运行不需要显示输出的程序或脚本,并且让它在后台运行,不占用终端的输入输出。



去除文件夹下所有文本文件的行末空格

想要达到这个目的有多种实现方式,比如:

find . -type f -exec egrep -l " +$" {} \; | grep -v xxx | xargs sed -i 's/[ ]*$//g'

再比如:

find xxx -type f -name "*.txt" -exec sed -i 's/[ \t]*$//' {} \;

主要部分的含义:


  • -type f



    -type f

    参数用于限制

    find

    命令只查找普通文件(非目录、符号链接等)。


  • -name "*.txt"



    -name "*.txt"

    参数用于匹配文件名,这里匹配以

    .txt

    结尾的文件。您可以根据实际需要修改为其他文件扩展名。


  • -exec



    -exec

    参数用于对找到的每个文件执行后面的命令。


  • sed -i 's/[ \t]*$//' {}



    sed

    命令用于进行文本替换。

    -i

    参数表示直接在原文件上进行修改(in-place),而不是在终端输出。

    s/[ \t]*$//

    是一个替换表达式,用于匹配行末的空格(包括空格和制表符),将其替换为空。


  • {}



    find

    命令中的占位符,代表找到的每个文件名。


  • \;



    find

    命令中的结束符,表示

    -exec

    参数的结束。

还可以利用管道来实现,使用管道 (Pipeline) 去掉一个文件夹下所有文本文件行末的空格,可以结合

find

命令和

sed

命令来完成。管道允许将一个命令的输出作为另一个命令的输入,以实现更复杂的文本处理,如下:

find xxx -type f -name "*.txt" -print0 | xargs -0 sed -i 's/[ \t]*$//'

各部分的含义:


  • find xxx -type f -name "*.txt" -print0



    find

    命令查找指定目录

    xxx

    下的所有以

    .txt

    结尾的文本文件,并使用

    -print0

    参数将文件名以空字符作为分隔符打印出来。这是为了处理文件名中可能包含空格或特殊字符的情况。


  • |

    :管道符号,将

    find

    命令的输出传递给下一个命令。


  • xargs -0



    xargs

    命令用于接收管道的输入,并将其作为参数传递给后面的命令。

    -0

    参数表示使用空字符作为输入分隔符,与

    find

    命令的

    -print0

    参数相对应。


  • sed -i 's/[ \t]*$//'



    sed

    命令用于进行文本替换,同样使用

    -i

    参数进行直接修改。

    s/[ \t]*$//

    是一个替换表达式,用于去掉行末的空格。

与之前的命令相比,这个命令通过管道一次性处理了多个文件,效率可能会更高一些。



总结

  • 将某个程序在后台运行,并将其标准输出和标准错误输出都丢弃,可以在运行命令后加

    >/dev/null 2>&1
  • 去除文件行末空格

    find . -type f -exec egrep -l " +$" {} \; | grep -v xxx | xargs sed -i 's/[ ]*$//g'



==>> 反爬链接,请勿点击,原地爆炸,概不负责!<<==


机会很重要,选择也很重要,在机会面前做出选择同样很重要,不要过分夸大未选择的那条路,很多时候即使重新选择一次,大部分人的道路不会发生改变,已经定型了…

我也不知道是熬到了司机来,还是把前边排队的人熬走了,现在还有3人排队~



版权声明:本文为albertsh原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。