Bash предоставляет встроенную printf
спецификацию формата %q
, которая выполняет экранирование оболочки даже в более старых (<4.0 )версиях Bash:
printf '[%q]\n' "Ne'er do well"
# Prints [Ne\'er\ do\ well]
printf '[%q]\n' 'Sneaky injection $( whoami ) `ls /root`'
# Prints [Sneaky\ injection\ \$\(\ whoami\ \)\ \`ls\ /root\`]
Этот трюк также можно использовать для возврата массивов данных из функции:
function getData()
{
printf '%q ' "He'll say hi" 'or `whoami`' 'and then $( byebye )'
}
declare -a DATA="( $( getData ) )"
printf 'DATA: [%q]\n' "${DATA[@]}"
# Prints:
# DATA: [He\'ll\ say\ hi]
# DATA: [or\ \`whoami\`]
# DATA: [and\ then\ \$\(\ byebye\ \)]
Обратите внимание, что встроенная программа Bash printf
отличается от утилиты printf
, которая поставляется в комплекте с большинством Unix -подобных операционных систем. Если по какой-то причине команда printf
вызывает утилиту вместо встроенной, вы всегда можете вместо нее выполнить builtin printf
.
Установите драйверы nvidia :используйте
nouveau.modeset=0.
В grub для использования драйверов nvidia