gpt4 book ai didi

linux - Docker bash'ing with find

转载 作者:太空宇宙 更新时间:2023-11-04 10:39:56 24 4
gpt4 key购买 nike

我在尝试让 bash 脚本在 Docker 运行时按预期工作(就像在正常的 bash session 中所做的那样)时遇到了麻烦。

目标是用 JAVA_HOME 目录中的实际文件替换官方 java 容器中的所有符号链接(symbolic link)文件,因此所有内容都包含在 java 目录中而不是目录之外,例如

$JAVA_HOME/jre/lib/security/java.policy <--- 符号链接(symbolic link)到 ---> /etc/java-7-openjdk/security/java.policy

最终结果应该是位于以下位置的文件:$JAVA_HOME/jre/lib/security/java.policy

设置:

docker run java:7u91/bin/bash -cxe "find/usr/lib/jvm/**/jre -type l | while read f; do echo $f; cp --remove-destination $ (阅读链接 $f)$f;完成;”

我尝试了几种不同的方法来有效地做到这一点,但 xargs 和 exec 都无济于事。

此时如有任何建议,我们将不胜感激。

最佳答案

看起来这就是正在发生的事情:$(readlink $f) 没有在非符号链接(symbolic link)的文件上返回任何内容(仅适用于符号链接(symbolic link))。因此,该表达式本质上是空的。

因此,只有 $f 返回一个值。因此,如果对表达式求值,它将打印 cp --remove-destination VALUE_OF_$F;,并且 $f 看起来像是cp 命令,没有第二个参数。这就是缺少“目的地”的原因。

另外,您需要考虑这样一个事实,将您的命令放在双引号内会出现问题。变量将在主机上解析,而不是在 docker 容器中解析。用单引号替换双引号以防止这种情况发生。

关于linux - Docker bash'ing with find,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35566066/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com