我有一個看起來像這樣的Makefile:
build-docker:
DOCKER_BUILDKIT=1 docker build --ssh default=~/.ssh/id_rsa -t my-app .
如果我運行,make build-docker我會收到以下錯誤:
$ make build-docker
DOCKER_BUILDKIT=1 docker build --ssh default=~/.ssh/id_rsa -t my-app .
could not parse ssh: [default=~/.ssh/id_rsa]: stat ~/.ssh/id_rsa: no such file or directory
make: *** [Makefile:12: build-docker] Error 1
但是,如果我直接在 shell 中運行命令,它運行得很好:
$ DOCKER_BUILDKIT=1 docker build --ssh default=~/.ssh/id_rsa -t my-app .
[ ] Building 65.5s (20/20) FINISHED
為什么會這樣,我該如何解決?
uj5u.com熱心網友回復:
您正在運行相同的命令,但在不同的 shell 中。您的互動式 shell 可能是bash. 但是 shell make 使用的是/bin/shPOSIX 標準 shell(通常)。
~in 引數的特殊處理是一個 shell 特性:它沒有嵌入到諸如 docker 或 ssh 之類的程式中。而且,它沒有在 POSIX 中定義;這是某些 shell 的附加功能,例如bash.
在我的系統上:
bash$ echo foo=~
foo=/home/me
bash$ /bin/sh
$ echo foo=~
foo=~
為了便于移植,您應該使用完整的路徑名或$HOME代替(請記住,在 make 配方中,您必須加倍以$將其從 make 中轉義:)$$HOME。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/350254.html
下一篇:向GNU并行轉發空引數不起作用?
