Linux sh -c命令使用教程
栏目:
Linux
发布时间:2022-02-18
假设我们要在 linux 服务器上执行两条需要 sudo 权限的命令,比如 "docker ps -a" 和 "docker images"
当前用户不使用 sudo 无权限执行 docker ps -a
$ docker ps -a
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.39/containers/json?all=1: dial unix /var/run/docker.sock: connect: permission denied
当前用户不使用 sudo 无权限执行 docker images
$ docker images
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.39/images/json: dial unix /var/run/docker.sock: connect: permission denied
上面两条命令之前需要分别加 sudo 才能执行。
sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
79716908b26f node:12.18.2 "docker-entrypoint.s…" 5 minutes ago Up 5 minutes zealous_nightingale
$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
node latest 7220633f01cd 3 months ago 992MB
styd/node 12.18.2 5899a28bba7a 6 months ago 196MB
使用 sh -c
借助 sh -c 我们可以一次性给上述两个命令附权限
$ sudo sh -c 'docker ps -a; docker images'
# docker ps -a 的结果
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
79716908b26f node:12.18.2 "docker-entrypoint.s…" 7 minutes ago Up 7 minutes
zealous_nightingale
# docker images 的结果
REPOSITORY TAG IMAGE ID CREATED SIZE
node latest 7220633f01cd 3 months ago 992MB
styd/node 12.18.2 5899a28bba7a 6 months ago 196MB
借助 sh -c 让 docker run 支持多个命令的执行
docker run 后面如果需要跟多个命令,可以将多个命令放在 "sh -c" 后面执行。
实例:
# DOCKER_IMAGE 替换为镜像名称
docker run -i --rm DOCKER_IMAGE sh -c "rm -rf ./node_modules && yarn cache clean && npm run ci"
小结
sh -c 非常有用,我们可以将多个 shell 命令组合,以字符串的形式作为 sh -c 的参数使用。
本文地址:https://www.tides.cn/p_linux-sh-c