スクリプト ファイルを使用してファイルを作成中に権限が拒否されました

スクリプト ファイルを使用してファイルを作成中に権限が拒否されました

というスクリプトファイルを作成しましたブラックリスト

#!/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

私が作成しているこのスクリプトファイルからサウンドブラックリストファイルを入力し/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

私は個人的に、ファイルに追加するために root として実行できる tee を使用します。

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

須藤アクションは を実行するだけなので<command> <params>、出力のリダイレクト(>)は の外で行われます。須藤この場合。

関連情報