缩短或合并`&> / dev / null&`的多行


11

每次启动机器时,我都会运行以下程序:

$ cat start.sh
#! /bin/bash
google-chrome &> /dev/null &
lantern &> /dev/null &
xdg-open . &> /dev/null &
emacs &> /dev/null  &
code ~/Programs/ &> /dev/null &
xdg-open ~/Reference/topic_regex.md &> /dev/null &

笨拙的&> /dev/null &...我该如何缩短逻辑?


2
您可以将所有或大多数程序放在启动应用程序中
暂停,直到另行通知。

很棒的应用程序。通常,gnome-session会发生错误,导致突然崩溃,因此我从tmux服务器启动它们。@DennisWilliamson
微积分

Answers:


12

该部分&> /dev/null表示输出重定向。您可以通过将多个命令分组为一个块来将多个命令重定向到同一文件:

#! /bin/bash
{
google-chrome &
lantern &
xdg-open . &
emacs  &
code ~/Programs/ &
xdg-open ~/Reference/topic_regex.md &
} &> /dev/null

但是,同一内容不能用于在后台(&)中启动单个命令。放在&该块后面意味着将整个块作为单个脚本在后台运行。


请注意,&>不赞成使用该语法,应将其替换为>/dev/null 2>&1 wiki-dev.bash-hackers.org/scripting/obsolete
multithr3at3d

4
@ multithr3at3d与POSIX不兼容的Bashism?当然!弃用还是过时?,无论这份名单的三位作者在2015年最后一次编辑的想法如何。这是一种简短的形式,而缩短命令行正是OP在这里的目标。如果有人#!/bin/bash在不同的外壳中运行脚本而没有先检查可移植性,那么如果它不起作用肯定不是Bash的错。
甜点,

12

我编写了一个函数并将其放入我的设备中,.bashrc以运行与终端分离的内容:

detach () 
{ 
    ( "$@" &> /dev/null & )
}

... 接着:

detach google-chrome
detach xdg-open ~/Reference/topic_regex.md

而且由于我很懒,所以我还写了一个快捷方式xdg-open

xo () 
{ 
    for var in "$@"; do
        detach xdg-open "$var";
    done
}

因为只xdg-open需要一个参数,所以该函数xo遍历所有给定参数并分别调用xdg-open每个参数。

这允许:

detach google-chrome
xo . ~/Reference/topic_regex.md

5

您可以使用以下命令重定向所有后续命令的输出:

exec 1>/dev/null
exec 2>/dev/null

3

您可以创建一个循环并将其作为参数提供给它:

for i in google-chrome "xdg-open ." "code ~/Programs/"; do
  $i &
done &>/dev/null

请注意,这种方式与带有花括号的subshel​​l方法完全一样,可以汇总输出并立即重定向所有输出。


3

我创建了一个特殊文件,例如/dev/null使用较短的路径来缩短重定向。我用作/n新文件的路径:

sudo mknod -m 0666 /n c 1 3

这样,您可以将各个行缩短为:

google-chrome &>/n &

来源:如何创建/ dev / null?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.