
我有這個指令:
docker volume ls -qf dangling=true | xargs docker volume rm
我明白了:
"docker volume rm" requires at least 1 argument. See 'docker volume rm --help'. Usage: docker volume rm [OPTIONS] VOLUME [VOLUME...]
我認為這是因為沒有輸入xargs
(因為命令沒有返回匹配的捲docker
)。我該怎麼xargs
做沒有什麼當它沒有收到輸入時?
答案1
您正在尋找該-r
選項。這是一個非標準選項,可能會在您的系統上實現(請檢查您的xargs
手冊)。
來自 GNUxargs
手冊:
-r
,--no-run-if-empty
如果標準輸入不包含任何非空白,則不要執行該命令。通常,即使沒有輸入,該命令也會運行一次。該選項是 GNU 擴充。
來自 OpenBSD 系統的手冊:
-r
如果沒有參數,請勿執行該指令。通常,即使沒有參數,該命令也至少執行一次。
在 FreeBSD 和 macOS 上,這是預設行為。 FreeBSD 可以-r
選擇與 GNU 相容xargs
,而 macOS 則沒有。
xargs
在 AIX 和 Solaris 上沒有-r
選項,並且不知道 AIX 上的預設行為是什麼(我無權存取 AIX 系統)。預設情況下,Solaris 將至少運行該實用程式一次。
-r
在沒有標誌的系統上xargs
(並且在東部運行該實用程式一次是預設行為,如在 Solaris 上),一種可移植的解決方法是使用
something | xargs sh -c '[ "$#" -gt 0 ] && utility "$@"' sh
(或類似的東西;請注意,尾隨sh
是必需的) whereutility
是您想要運行的實用程序xargs
,以及 wheresomething
生成一些參數。
簡短的 shell 腳本[ "$#" -gt 0 ] && utility "$@"
測試是否為其提供了任何參數,如果是,則它使用這些參數來執行該實用程式。