tags 9742 + notabug thanks Morty wrote: > On Thu, Oct 13, 2011 at 10:05:05AM +0100, Pádraig Brady wrote: > >> Note the above is easier to express in shell like: >> >> [ -e "$file" ] || touch "$file" > > Thanks, I'm familiar with it. :) > >> But that is racy. If you were using touch for locking purposes > > I'm using touch to make sure the file exists before an operation that > will yield an error if it doesn't exist. For example:
Thanks for the suggestion. However, when there's such an easy and portable way to do what you want, touch_if_absent() { test -e "$1" || touch "$1"; } it is counterproductive (and contrary to the "Unix way") to encumber a tool like "touch" with an option to provide that functionality. Besides, then you'd have to wait until a release including your option makes it into whatever distribution you use (or build from source). With the above, you have something that is portable and works now. > resolv=/etc/resolv.conf > touch $resolv > ci -l -t-$resolv -m"check-in existing" $resolv > grep -q domain $resolv || echo domain $domain >> $resolv > ci -l -m"add domain $domain" $resolv > > The intent of code like the above is to make sure a certain file is in > revision control and contains a certain setting. If the file already > is in revision control and has the setting, the code should do > nothing. But touch changes the mtime. The problem could be fixed by > slinging around ifs, but that's inelegant.