I agree with the race fix of JG, but I dislike the SUSV3-breaking find, and I don't care about PATH changes, keep it simple, stupid
This commit is contained in:
		
							
								
								
									
										34
									
								
								dmenu_path
									
									
									
									
									
								
							
							
						
						
									
										34
									
								
								dmenu_path
									
									
									
									
									
								
							@ -1,26 +1,26 @@
 | 
			
		||||
#!/bin/sh -f
 | 
			
		||||
#!/bin/sh
 | 
			
		||||
CACHE=$HOME/.dmenu_cache
 | 
			
		||||
IFS=:
 | 
			
		||||
 | 
			
		||||
qfind() {
 | 
			
		||||
	find "$@" 2>/dev/null
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
uptodate() {                                                                       
 | 
			
		||||
	test -f $CACHE &&
 | 
			
		||||
		test "$(echo "$PATH")" = "$(sed 1q "$CACHE")" &&
 | 
			
		||||
		! qfind $PATH -maxdepth 0 -newer $CACHE >/dev/null
 | 
			
		||||
uptodate() {
 | 
			
		||||
	test ! -f $CACHE && return 1
 | 
			
		||||
	for dir in $PATH
 | 
			
		||||
	do
 | 
			
		||||
		test $dir -nt $CACHE && return 1
 | 
			
		||||
	done
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
if ! uptodate
 | 
			
		||||
then
 | 
			
		||||
	{
 | 
			
		||||
		echo "$PATH"
 | 
			
		||||
		qfind $PATH -type f -maxdepth 1 '(' -perm -u+x -o -perm -g+x -o -perm -o+x ')' |
 | 
			
		||||
			sed 's,.*/,,' | sort | uniq
 | 
			
		||||
	}
 | 
			
		||||
	mv $CACHE.$pid $CACHE
 | 
			
		||||
	for dir in $PATH
 | 
			
		||||
	do
 | 
			
		||||
		for file in "$dir"/*
 | 
			
		||||
		do
 | 
			
		||||
			test -x "$file" && echo "${file##*/}"
 | 
			
		||||
		done
 | 
			
		||||
	done | sort | uniq > $CACHE.$$
 | 
			
		||||
	mv $CACHE.$$ $CACHE
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
tail -n +2 $CACHE
 | 
			
		||||
 | 
			
		||||
cat $CACHE
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user