我在这是一个初学者,并寻找答案我的问题,但没有find任何我明白如何执行。 任何帮助将不胜感激。
我有一个脚本:
FILE$=`ls ~/Desktop/File_Converted/` mkdir /tmp/$FILE mv ~/Desktop/File_Converted/* /tmp/$FILE/
所以我可以使用Applescript来说当一个文件被放到这个桌面文件夹中时,创build一个临时目录,在那里移动文件和做其他的事情。 然后我删除临时目录。 这就好了,但问题是,如果另一个文件被丢弃到File_Converted目录之前,我正在做的东西的文件,我目前正在使用它将改变$ FILEvariables的值之前,脚本有完成对当前文件的操作。
我想要做的是使用variables设置variables,例如,$ FILE1。 我检查$ FILE1是否被定义,如果没有,使用它。 如果它被定义,然后尝试$ FILE2等…最后,当我完成,我想回收variables,所以$ FILE1得到设置回到空再次下一个文件放入File_Converted文件夹可以使用它再次。
任何帮助将不胜感激。 我是新来的,所以我不知道从哪里开始。
谢谢!
担
你的问题有点难以解析,但是我认为你并不是真正理解shell 遍历或循环结构 。 根据现在的情况 ,扩大这个空间,而不是早晚有什么。
DIR=$(mktemp -d) mv ~/Desktop/File_Converted/* "$DIR" cd "$DIR" for file in *; do : # whatever you want to do to "$file" done
您不需要LIFO – 针对不同事件运行的脚本的多个副本不会与其变量名称发生冲突。 他们将冲突的是共享的临时目录,并且每次脚本运行时,都应该使用mktemp -d
创建一个具有新的唯一且保证不冲突的名称的临时目录。
tempdir=$(mktemp -t -d mytemp.XXXXXX) mv ~/Desktop/File_Converted/* "$tempdir" cd "$tempdir" for f in *; do ...whatever... done
你所描述的是一个典型的竞争条件,其中一个操作将在冲突操作开始之前完成并不清楚。 这些并不容易处理,但是通过处理脚本和编程,您将学到如此多的东西,即使是为了学习,这样做也是值得的。
我会建议您先查看lockfile
或flock
manpage。 尝试一些实验。 看起来你可能对此有正确的才能,因为你正在问正确的问题。
顺便说一句,我怀疑你想杀了$
FILE$=`ls ~/Desktop/File_Converted/`
顺便说一句,@CharlesDuffy正确地观察到:“在脚本中使用ls
指示某些事情本身是错误的,请参阅mywiki.wooledge.org/ParsingLs和mywiki.wooledge.org/BashPitfalls 。 有人怀疑建议的lockfile
练习会清除这两点,尽管它可能需要几个小时才能完成。