等到上一个命令完成
Wait Until Previous Command Completes
我在我的 MacMini 上写了一个 bash 脚本,可以在文件下载完成时随时执行。文件下载完成后,mac挂载我的NAS,重命名文件,然后将文件从mac复制到NAS,从mac删除文件,然后卸载NAS.
我的问题是,有时 NAS 需要几秒钟才能挂载。发生这种情况时,我会收到一条错误消息,指出该文件无法复制,因为该目录不存在。
NAS瞬间挂载时,(如果文件较小)先复制文件,然后删除文件,NAS卸载。
当文件较大时,删除文件时复制过程停止。
我正在寻找的是,如何让脚本“等待”直到挂载 NAS,然后如何让脚本再次等待文件复制完成?
感谢您的任何意见。下面是我的代码。
#connect to NAS
open 'smb://username:password@ip_address_of_NAS/folder_for_files'
#I WANT A WAIT COMMAND HERE SO THAT SCRIPT DOES NOT CONTINUE UNTIL NAS IS MOUNTED
#move to folder where files are downloaded
cd /Users/account/Downloads
#rename files and copy to server
for f in *; do
newName="${f/)*/)}";
mv "$f"/*.zip "$newName".zip;
cp "$newName".zip /Volumes/folder_for_files/"$newName".zip;
#I NEED SCRIPT TO WAIT HERE UNTIL FILE HAS COMPLETED ITS TRANSFER
rm -r "$f";
done
#unmount drive
diskutil unmount /Volumes/folder_for_files
我不再有 mac 来尝试这个,但似乎 open 'smb://...'
是这里唯一不等待完成的命令,而是在后台进行实际工作。
解决此问题的最佳方法是使用 open
以外的其他方式来挂载 NAS 驱动器。根据 this answer 以下内容应该可以工作,但由于缺少 mac 和 NAS 我无法对其进行测试。
# replace `open ...` with this
osascript <<< 'mount volume "smb://username:password@ip_address_of_NAS"'
如果这不起作用,请使用此解决方法,手动等待 NAS 安装。
open 'smb://username:password@ip_address_of_NAS/folder_for_files'
while [ ! -d /Volumes/folder_for_files/ ]; do sleep 0.1; done
# rest of the script
你可以使用一个循环来休眠然后五秒钟,然后 运行 smbstatus
如果输出包含任何字符串来识别你的 smb://username:password@ip_address_of_NAS/folder_for_files
连接`
找到后开始复制您的文件。你也可以有一个计数器变量来停止,在一定次数后休眠,然后检查连接是否也成功了。
我在我的 MacMini 上写了一个 bash 脚本,可以在文件下载完成时随时执行。文件下载完成后,mac挂载我的NAS,重命名文件,然后将文件从mac复制到NAS,从mac删除文件,然后卸载NAS.
我的问题是,有时 NAS 需要几秒钟才能挂载。发生这种情况时,我会收到一条错误消息,指出该文件无法复制,因为该目录不存在。
NAS瞬间挂载时,(如果文件较小)先复制文件,然后删除文件,NAS卸载。
当文件较大时,删除文件时复制过程停止。
我正在寻找的是,如何让脚本“等待”直到挂载 NAS,然后如何让脚本再次等待文件复制完成?
感谢您的任何意见。下面是我的代码。
#connect to NAS
open 'smb://username:password@ip_address_of_NAS/folder_for_files'
#I WANT A WAIT COMMAND HERE SO THAT SCRIPT DOES NOT CONTINUE UNTIL NAS IS MOUNTED
#move to folder where files are downloaded
cd /Users/account/Downloads
#rename files and copy to server
for f in *; do
newName="${f/)*/)}";
mv "$f"/*.zip "$newName".zip;
cp "$newName".zip /Volumes/folder_for_files/"$newName".zip;
#I NEED SCRIPT TO WAIT HERE UNTIL FILE HAS COMPLETED ITS TRANSFER
rm -r "$f";
done
#unmount drive
diskutil unmount /Volumes/folder_for_files
我不再有 mac 来尝试这个,但似乎 open 'smb://...'
是这里唯一不等待完成的命令,而是在后台进行实际工作。
解决此问题的最佳方法是使用 open
以外的其他方式来挂载 NAS 驱动器。根据 this answer 以下内容应该可以工作,但由于缺少 mac 和 NAS 我无法对其进行测试。
# replace `open ...` with this
osascript <<< 'mount volume "smb://username:password@ip_address_of_NAS"'
如果这不起作用,请使用此解决方法,手动等待 NAS 安装。
open 'smb://username:password@ip_address_of_NAS/folder_for_files'
while [ ! -d /Volumes/folder_for_files/ ]; do sleep 0.1; done
# rest of the script
你可以使用一个循环来休眠然后五秒钟,然后 运行 smbstatus
如果输出包含任何字符串来识别你的 smb://username:password@ip_address_of_NAS/folder_for_files
连接`
找到后开始复制您的文件。你也可以有一个计数器变量来停止,在一定次数后休眠,然后检查连接是否也成功了。