Shell 带Docker命令和变量的inotifywait

Shell 带Docker命令和变量的inotifywait,shell,ubuntu,docker,inotifywait,Shell,Ubuntu,Docker,Inotifywait,我正在尝试创建一个shell脚本,该脚本将检查一个新文件,然后将cp发送到Docker容器。到目前为止我掌握的代码是 #!/bin/sh source="/var/www/html/" dest="dev_ubuntu:/var/www/html/" inotifywait -m "/var/www/html" -e create -e moved_to | while read file; do sudo docker cp /var/www/html/$file dev_ubu

我正在尝试创建一个shell脚本,该脚本将检查一个新文件,然后将cp发送到Docker容器。到目前为止我掌握的代码是

#!/bin/sh


source="/var/www/html/"
dest="dev_ubuntu:/var/www/html/"

inotifywait -m "/var/www/html" -e create -e moved_to |
while read file; do
    sudo docker cp /var/www/html/$file dev_ubuntu:/var/www/html
done
但此代码给出以下错误:

Setting up watches.
Watches established.
"docker cp" requires exactly 2 argument(s).
See 'docker cp --help'.

Usage:  docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH

Copy files/folders between a container and the local filesystem

我做错了什么

文件名中是否有空格?使用双引号避免用单词分隔文件名:

echo $file
sudo docker cp "$file" dev_ubuntu:"$file"

我还回显了文件名以查看发生了什么。

文件名中是否有空格?使用双引号避免用单词分隔文件名:

echo $file
sudo docker cp "$file" dev_ubuntu:"$file"

我还回显了文件名,以查看发生了什么。

文件名确实有一个空格,我在空格中添加了一个“\u”。并将代码更改为
sudockercp”/var/www/html/$file“dev_ubuntu:/var/www/html
现在我得到以下错误
lstat/var/www/html/var:没有这样的文件或目录
,你想避免docker卷,对吗?因为卷是针对您的用例的,所以不客气。我已经在第二个$file中添加了双引号,这也是有效的:
#/bin/sh MONITORDIR=“/var/www/html/”inotifywait-m-r-e create--format'%w%f'${MONITORDIR}”|读取新文件时,创建了文件${NEWFILE}测试“sudo docker cp${NEWFILE}dev_ubuntu:/var/www/html完成
很棒。为什么不使用docker卷呢?文件名中确实有一个空格,我在空格中添加了一个“\ux”。并将代码更改为
sudockercp”/var/www/html/$file“dev_ubuntu:/var/www/html
现在我得到以下错误
lstat/var/www/html/var:没有这样的文件或目录
,你想避免docker卷,对吗?因为卷是针对您的用例的,所以不客气。我已经在第二个$file中添加了双引号,这也是有效的:
#/bin/sh MONITORDIR=“/var/www/html/”inotifywait-m-r-e create--format'%w%f'${MONITORDIR}”|读取新文件时,创建了文件${NEWFILE}测试“sudo docker cp${NEWFILE}dev_ubuntu:/var/www/html完成
很棒。为什么不使用docker音量?