jsxt, Zippo
Этот вариант подходит лучше.
String.prototype.format = function() {
var formatted = this;
for (var i = 0; i < arguments.length; i++) {
var regexp = new RegExp('\\{'+i+'\\}', 'gi');
formatted = formatted.replace(regexp, arguments[i]);
}
return formatted;
};
С помощью этой опции я могу заменить строки следующим образом:
'The {0} is dead. Don\'t code {0}. Code {1} that is open source!'.format('ASP', 'PHP');
С вашим кодом вторая {0} не будет заменена. ;)
Простое размещение 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
.