Ошибка «Отказано в доступе» при создании файла с использованием файла скрипта

Ошибка «Отказано в доступе» при создании файла с использованием файла скрипта

Я создал файл скрипта под названиемчерный_список.ш.

#!/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>, перенаправление вывода ( >) происходит изсудов этом случае.

Связанный контент