我想用script執行以下兩個command
docker rm $(docker ps -aqf status=exited)
docker rmi $(docker images --filter "dangling=true" -q --no-trunc)
有試過用反斜線,但沒用
docker rm `docker ps -aqf status=exited`
docker rmi `docker images --filter "dangling=true" -q --no-trunc`
不太懂你想問的問題,但在 bash 中 `...`
跟 $(...)
就是會把 backtick(反引號/重音符) `
(注意不是反斜線(backslash) \
!) 或 $
開頭圓括號內的指令執行完後的輸出放到原來的位置
也就是說原本的 script 可以等同於
# 把 `docker ps -aqf status=exited` 輸出的東西存到 `container_name`
container_name=$(docker ps -aqf status=exited)
# 然後移除 container
docker rm ${container_name}
# 這邊就是直接把 image 的名字放到原本的位置
docker rmi $(docker images --filter "dangling=true" -q --no-trunc)
舉例如果今天
docker ps -aqf status=exited
的輸出是
abcdefg
那
docker rm $(docker ps -aqf status=exited)
或
docker rm `docker ps -aqf status=exited`
的結果就等於
docker rm abcdefg
# ^^^^^^^ 換成結果了!
之所以鼓勵用 $(...)
而非 `...`
的理由是前者可以形成巢狀結構,例如
echo $(echo $(date) | rev)
但是 `...`
不行(會造成語句錯誤)只能一行一行分開寫
DATE=`date`
REV_DATE=`echo $DATE | rev`
echo ${REV_DATE}
但 `...`
的向後相容性比較好,也就是在舊的 shell 裡面仍可以運作
不知道是不是您想要問的?