Shell 带Docker命令和变量的inotifywait
我正在尝试创建一个shell脚本,该脚本将检查一个新文件,然后将cp发送到Docker容器。到目前为止我掌握的代码是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
#!/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音量?