
Я создал файл скрипта под названиемчерный_список.ш.
#!/bin/bash
default_card=`head -1 /proc/asound/modules`
echo $default_card
if [ ! -e /etc/modprobe.d/sound.blacklist.conf ] && [[ "$default_card" =~ "snd_hda_intel" ]]; then
echo "blacklist snd_hda_intel" > /etc/modprobe.d/sound.blacklist.conf ---> not working
else
echo "Default sound card(snd_hda_intel) is already added in black list";
fi
из этого файла скрипта, который я создаюsound.blacklist.confфайл, /etc/modprobe.d
но я получил /etc/modprobe.d/sound.blacklist.conf: Permission denied
ошибку.
Так старались
echo itsme | sudo -S echo "blacklist snd_hda_intel" > /etc/modprobe.d/sound.blacklist.conf
но это также не сработало, так как можно создать файл в /etc/modprobe.d
каталоге из моегофайл скрипта.
решение1
Я бы лично использовал tee, который можно запустить от имени root для добавления к файлам:
echo "blacklist snd_hda_intel" | sudo tee -a /etc/modprobe.d/sound.blacklist.conf
Но это может не ожидаться в середине сценария. Если вы делаете что-то, требующее привилегий root, может быть — и я не говорю этого наверняка — имеет смысл позволить только root запускать сценарий, вставив это в начало сценария:
if [[ $EUID -ne 0 ]]; then
echo "Only root can run this. Run again with sudo" 2>&1
exit 1
fi
решение2
Попробуйте эту команду,
sudo sh -c "echo 'blacklist snd_hda_intel' > /etc/modprobe.d/sound.blacklist.conf"
решение3
Вам также необходимо включить в него перенаправление вывода sudo
.
Для меня самый простой способ сделать это — не ставитьсудовнутри вашего скрипта, но чтобы запустить ваш скрипт с помощьюсудо.
Чтобы понять вашу проблему, если у вас есть следующая команда: $ sudo " " > /etc/file
Theсудодействие заключается только в выполнении <command> <params>
, перенаправление вывода ( >
) происходит изсудов этом случае.