스크립트 파일을 사용하여 파일을 생성하는 중 권한 거부 오류가 발생했습니다.

스크립트 파일을 사용하여 파일을 생성하는 중 권한 거부 오류가 발생했습니다.

라는 스크립트 파일을 만들었습니다.블랙리스트.sh.

#!/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를 사용하고 싶습니다.

echo "blacklist snd_hda_intel" | sudo tee -a /etc/modprobe.d/sound.blacklist.conf

그러나 이는 스크립트 중간에 예상되지 않을 수도 있습니다. 루트 권한이 필요한 작업을 수행하는 경우 스크립트 상단 근처에 다음을 추가하여 루트만 스크립트를 실행하도록 하는 것이 더 합리적일 수 있습니다.

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스크립트 내부에서 다음을 사용하여 스크립트를 실행하려면sudo.

문제를 이해하려면 다음 명령이 있는 경우: $ sudo " " > /etc/file

그만큼sudo작업은 실행하기만 하면 <command> <params>출력( )의 리디렉션이 >외부에서 발생합니다.sudo이 경우.

관련 정보