我有一个命令:
bin/deploy staging --profile my_profile | grep 'UploadError'
通常
bin/deploy staging --profile my_profile
将许多日志行打印到控制台,但是在执行grep时,所有内容都会被静音。有没有我可以用来取消日志输出的标志?
基本上打印出命令通常打印到控制台的内容,并执行grep。
grep的目的是我有一些逻辑来处理部署期间的UploadError。我想打印完整输出的原因是我想看看部署期间发生了什么,而不是抑制日志。
目前如果grep找不到字符串,则不会打印任何内容。如果它确实打印了以下内容:
[web] UploadError
[worker] UploadError
如果我删除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.
所以我要做的就是做grep,无论是否找到字符串,还要将原始命令的输出打印到控制台。
答案 0 :(得分:3)
/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
保存在变量中
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
您可以进一步检查变量,如下所示
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
答案 1 :(得分:1)
基本上打印出命令通常打印到控制台的内容,并执行grep。
我不相信grep可以做到这一点,但greplike工具ack出于这个原因有--passthru
选项。它将从输入中输出所有行,并突出显示它找到的匹配项。