如何将$(ls /all)这样的shell代码 Package 在docker容器中由docker exec执行的字符串中?[duplicate]

dzhpxtsq  于 2023-03-13  发布在  Shell
关注(0)|答案(1)|浏览(90)

此问题在此处已有答案

Escape $ in variable passed to docker run command(1个答案)
2天前关闭。
当我使用Docker时,我想通过docker exec在主机容器中进行一些操作,我遇到了这个问题。
我想这样做,但错误:

# in host
docker exec test-container bash -c "for i in `ls /folder-in-docker`; do someoperationon($i); done"

我用一个命令简化了这个问题:

# host environment
docker exec test-container bash -c "for i in `ls /`; do echo $i; done"
>! bash: -c: line 2: syntax error near unexpected token `boot'
>! bash: -c: line 2: `boot

我需要ls /中i的代码“;重复$i;done”在容器中执行,但ls /在主机环境中执行。在主机环境中,结果ls /

bin  boot  cdrom  dev  etc  home  lib  lib32  lib64  libx32  lost+found  media  mnt  opt  proc  root  run  sbin  snap  srv  sys  tmp  usr  var

我尝试了其他方法,如$(ls /),但也出现错误:

docker exec test bash -c "for i in $(ls /); do echo $i; done"
>! bash: -c: line 2: syntax error near unexpected token `boot'
>! bash: -c: line 2: `boot'
1aaf6o9v

1aaf6o9v1#

使用单引号。

docker exec test-container bash -c 'for i in /folder-in-docker/*; do someoperationon($i); done'

最好还是让巴斯来处理。

func() {
   for i in /folder-in-docker/*; do someoperationon($i); done
}
docker exec test-container bash -c "$(declare -f func); func"

注意:不要解析ls,不要使用反勾号,用shellcheck检查你的脚本。

相关问题