【问题标题】:go tool vet . |& grep -v vendor;true去工具兽医。 |& grep -v 供应商;真
【发布时间】:2019-02-08 02:21:05
【问题描述】:
all: gotool
    @go build -v .
clean:
    rm -f apiserver
    find . -name "[._]*.s[a-w][a-z]" | xargs -i rm -f {}
gotool:
    gofmt -w .
    go tool vet . |& grep -v vendor;true

help:
    @echo "make - compile the source code"
    @echo "make clean - remove binary file and vim swp files"
    @echo "make gotool - run go tool 'fmt' and 'vet'"
    @echo "make ca - generate ca files"

.PHONY: clean gotool help

对这个推荐感到困惑go tool vet . |& grep -v vendor;true 并在进行此操作时出错...

$ make
gofmt -w .
go tool vet . |& grep -v vendor;true
/bin/sh: 1: Syntax error: "&" unexpected
Makefile:7: recipe for target 'gotool' failed
make: *** [gotool] Error 2

【问题讨论】:

  • 你的 shell 不支持|&。要么不要使用|& 语法,要么使用支持它的shell。
  • 我的 bash 版本是 4.4.19(1)-release (x86_64-pc-linux-gnu),或者关于如何围绕 |& 重新调整上述语法的任何建议?
  • 你可能没有使用 bash,错误提示 /bin/sh,这通常是一个更基本的 shell。你只是问|& 是什么意思吗?见stackoverflow.com/questions/35384999/what-does-mean-in-bash
  • 所以整个句子是什么意思? go tool vet . |& grep -v vendor;true
  • 提示:您可以告诉 vim 将交换文件写入特定位置。将此添加到您的 .vimrc 中:silent execute '!mkdir -p ~/.vim/mydir',然后添加以下行 set directory=~/.vim/mydirset backupdir=~/.vim/mydirset backupskip=~/.vim/mydir/*

标签: bash go makefile


【解决方案1】:

该命令尝试将标准输出和标准错误都重定向到grep。便携(主观上更好)的方法是

go tool vet . 2>&1 | grep -v vendor || true

即使grep 找不到任何匹配项(即没有不包含vendor 的输出行),结尾的true 也会导致make 命令成功。回想一下make 默认情况下会在第一个错误时中断编译;这避免了显然只是为了监视或娱乐而运行的命令的错误。

【讨论】:

    猜你喜欢
    • 2018-12-21
    • 1970-01-01
    • 1970-01-01
    • 2014-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-09
    • 1970-01-01
    相关资源
    最近更新 更多