Простое размещение sudo
перед cat
не работает, потому что >$OUTFILE
пытается открыть $OUTFILE
в текущем процессе оболочки, который не запущен от имени пользователя root.Вам необходимо, чтобы этот файл открылся в подпроцессе sudo
.
Вот один из способов сделать это:
sudo bash -c "cat >$OUTFILE" <<'EOF'
#!/bin/bash
#? [ ] / \ = + < > : ; " , * |
#/ ? < > \ : * | ”
#Filename="z:"${$winFn//\//\\}
echo "This is a generated shell script."
App='eval wine "C:\Program Files\foxit\Foxit Reader.exe" "'$winFn'"'
$App
EOF
Это запускает под-оболочку в sudo
и открывает $OUTFILE
из этого более привилегированного подпроцесса и запускает cat
(как еще один привилегированный подпроцесс).Между тем (менее привилегированный) родительский процесс передает документ здесь в подпроцесс sudo
.