泊坞窗执行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以便在容器中对其进行处理。