等待上一个命令完成

wmomyfyw  于 2022-10-23  发布在  Linux
关注(0)|答案(2)|浏览(143)

我已经在我的MacMini上写了一个bash脚本,可以在文件下载完成的任何时候执行。文件下载完成后,Mac安装My 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
fdbelqdn

fdbelqdn1#

我不再有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
yyhrrdl8

yyhrrdl82#

例如,您可以使用循环休眠,然后运行smbstatus,然后运行smbstatus,如果输出包含任何字符串来标识您的smb://username:password@ip_address_of_NAS/folder_for_files连接`,则在发现该字符串时开始复制您的文件。您还可以让一个计数器变量在休眠一定次数后停止,然后检查连接是否也成功。

相关问题