grep 隐藏命令的输出

Hos*_*inK 0 bash grep

我有一个像这样的命令:

bin/deploy staging --profile my_profile | grep 'UploadError'
Run Code Online (Sandbox Code Playgroud)

通常

bin/deploy staging --profile my_profile  
Run Code Online (Sandbox Code Playgroud)

打印许多日志行到控制台,但是当执行 grep 时,所有内容都会被静音。是否有一个标志可以用来取消日志输出的静音?

基本上打印出命令通常打印到控制台的内容并执行 grep。

grep 的目的是我有一些逻辑来处理部署期间的上传错误。我想打印完整输出的原因是我想查看部署期间发生的情况而不是抑制日志。

目前,如果 grep 找不到字符串,则不会打印任何内容。如果它执行类似以下操作,则会打印:

[web] UploadError

[worker] UploadError
Run Code Online (Sandbox Code Playgroud)

如果我删除 grep 命令,类似以下内容将打印到控制台:

[web] INFO: Uploading archive to s3 location: my-app/app-27b50-
170829_133831-stage-170829_133831.zip
[web] INFO: Creating AppVersion app-27b50-170829_133831-stage-
170829_133831
[web] WARNING: Deploying a previously deployed commit.
[web] Uploading my-app/app-27b50-170829_133831-stage-
170829_133831.zip to S3. This may take a while.
[web] Upload Complete.
Run Code Online (Sandbox Code Playgroud)

所以我想做的是执行 grep,无论是否找到字符串,也将原始命令的输出打印到控制台。

Aks*_*gde 5

/dev/tty

与该进程的进程组关联(如果有)。对于希望确保将消息写入终端或从终端读取数据(无论输出如何重定向)的程序或 shell 过程非常有用。它还可用于需要输出文件名的应用程序,当需要键入输出并且找出当前正在使用的终端很麻烦时。在每个进程中,控制终端的同义词

例如

akshay@db-3325:/tmp$ cal | tee /dev/tty | grep -i august
    August 2017       
Su Mo Tu We Th Fr Sa  
       1  2  3  4  5  
 6  7  8  9 10 11 12  
13 14 15 16 17 18 19  
20 21 22 23 24 25 26  
27 28 29 30 31        

    August 2017 
Run Code Online (Sandbox Code Playgroud)

保存在变量中

akshay@db-3325:/tmp$ myvar=$(cal | tee /dev/tty | grep -i august)
    August 2017       
Su Mo Tu We Th Fr Sa  
       1  2  3  4  5  
 6  7  8  9 10 11 12  
13 14 15 16 17 18 19  
20 21 22 23 24 25 26  
27 28 29 30 31        

akshay@db-3325:/tmp$ echo $myvar
August 2017
Run Code Online (Sandbox Code Playgroud)

您可以进一步检查变量,如下所示

akshay@db-3325:/tmp$ myvar=$(cal | tee /dev/tty | grep -i september)
    August 2017       
Su Mo Tu We Th Fr Sa  
       1  2  3  4  5  
 6  7  8  9 10 11 12  
13 14 15 16 17 18 19  
20 21 22 23 24 25 26  
27 28 29 30 31        

akshay@db-3325:/tmp$ [ -z "$myvar" ] && echo "Not found" || echo "Found september"
Not found
Run Code Online (Sandbox Code Playgroud)