泊坞窗执行printf给没有这样的文件或目录错误
我正在试图为现有的docker容器运行以下命令:
docker exec my_docker printf '%sTest' >> /usr/local/src/test.txt
它给了我以下错误:
-bash: /usr/local/src/test.txt: No such file or directory
而当我做到以下几点:
docker exec -it my_docker bash
并input相同的命令,一切正常。 有什么我在这里失踪?
谢谢
有一个很好的理由:它被解释为两个命令。 尝试在命令string中包装printf命令:
docker exec my_docker bash -c 'printf "%sTest" >> /usr/local/src/test.txt'
关键是你已经使用了bash运算符。 类似于任何时候你运行类似于:
echo one two >> file.txt
“>>”运算符不会作为echo的parameter passing(像“one”和“two”)。 相反,它会执行你的echo命令并将其输出附加到一个文件中。 在这种情况下,“>>”运算符对您的docker exec执行相同的操作,并尝试将结果输出到/usr/local/src/scores.txt
并报告该目录不存在(在主机上,而不是容器)。
你可以做:
docker exec my_docker bash -c "printf '%sTest' >> /usr/local/src/test.txt"
确保bash执行正确的命令。
>>
正在被docker主机上的shell捕获。 因此,它试图将docker
命令的结果输出到主机上的文件系统,而不是将printf
命令输出到容器内的文件系统。 如果/usr/local/src/
在主机上不存在,则会尝试输出到该目录中的文件。
正如其他人所提到的,引用整个string,并将其作为parameter passing给bash -c
以便在容器中对其进行处理。