Ho difficoltà a citare un nome file che alla fine viene passato a chmod
. Lo script è stato originariamente scritto per StrictModes
di SSH e authorized_keys
, ma ho dovuto espanderlo a causa di un pessimo UMASK
che ha causato qualche disagio al filesystem. Lo script è sotto, e sta producendo carichi di:
chmod: /Users/<user>/Library/Application: No such file or directory
chmod: Support/TextMate/Managed/Bundles/HTML.tmbundle/Macros/Delete: No such file or directory
chmod: whitespace: No such file or directory
chmod: between: No such file or directory
chmod: tags.plist: No such file or directory
...
chmod: /Users/<user>/Library/Caches/com.operasoftware.Opera/Media: No such file or directory
chmod: Cache/index: No such file or directory
cut: stdin: Illegal byte sequence
...
Ho provato qualche soluzione alternativa, ma nessuno di loro mi ha aiutato. Ho provato a fare il doppio quoting come ""$file""
, ma il problema persisteva. Ho anche provato i tick posteriori (che in questo caso sono scoraggiati), ma il problema persisteva.
Il più vicino che ho potuto effettivamente citare era il "\"""$file""\""
disfunzionale. Ma poi chmod
si è lamentato che il nome file (con virgolette) non era un file reale:
$ sudo ~/fix-perms.sh
chmod: "/Users/Shared/.localized": No such file or directory
chmod: "/Users/<user>/.CFUserTextEncoding": No such file or directory
chmod: "/Users/<user>/.lesshst": No such file or directory
Come cito il nome file che esce da find
che viene passato su chmod
? O come ottengo chmod
per prendere il nome file come argomento singolo?
$ cat ~/fix-perms.sh
#!/bin/bash
# Directories
find /Users/* -type d -exec chmod 0700 {} \;
find /Users/Shared -type d -exec chmod 0777 {} \;
# Files
for file in 'find /Users/* -type f';
do
if [ 'file "$file" | cut -d":" -f 2 | grep -i -c executable' -eq 0 ];
then
'chmod 0600 "$file"'
else
'chmod 0700 "$file"'
fi
done
for user in 'ls -A /Users';
do
if [ -e "/Users/$user/.ssh/authorized_keys" ];
then
chmod 0600 "/Users/${user}/.ssh/authorized_keys"
fi
done