-w bash의 명령문이 작동하지 않는 경우 플래그

-w bash의 명령문이 작동하지 않는 경우 플래그

파일에 쓰기 권한이 있는지 확인하는 간단한 스크립트가 있습니다. 그렇다면 사용자는 파일 끝에 일부 텍스트 데이터를 추가할 수 있습니다. 그렇지 않은 경우 해당 사용자는 쫓겨납니다.

나는 프로그래밍 지식을 이용한 쉘 스크립팅 학습 유튜브 시리즈를 따르고 있습니다. 특히 비디오 7.

스크립트는 다음과 같습니다.

echo -e "Enter file name: \c"
read filename

if [ -f $filename ]
then        

 if [ -w $filename ]
  then
   echo "Type some text data. To quit, press CTRL + d: "
   cat >> $filename

  else
   echo "File has no write permissions"

 fi

else
 echo "$filename is not found"

fi

내 스크립트에서는 쓰기 권한이 없더라도 사용자가 제공된 파일에 추가할 수 있도록 허용합니다. -O또는 같은 다른 플래그는 -s예상대로 작동합니다. 여기에 문제가 있나요?

ls -l사용 가능한 파일에서 실행:

-r--r--r-- 1 nobody nobody    0 Dec  6 12:25 Mane
-r-xr-xr-x 1 root   root    165 Dec  6 12:06 Ramy.txt
-r--r--r-- 1 root   root      0 Dec  6 12:24 Salah

디버깅을 켠 상태에서 스크립트를 실행하면 출력됩니다.

[root@Console2-4KMH2 scripts]# bash -x ./hello_FILE_TEST_OPERAT_APPEND_2_File.sh

+ echo -e 'Enter file name: \c'
Enter file name: + read filename
Salah
+ '[' -f Salah ']'
+ '[' -w Salah ']'
+ echo 'Type some text data. To quit, press CTRL + d: '
Type some text data. To quit, press CTRL + d:
+ cat

내 문제가 해결되었습니다. 내 멍청한 게시물에 대한 모든 편집에 감사드립니다. 댓글 섹션의 Stephen Harris는 내가 스크립트를 루트로 실행하고 있음을 확인하고 파일에 쓰기 권한이 없더라도 루트가 파일에 쓸 것이라는 점을 강조했습니다. sudo 사용자를 생성하고 스크립트를 다시 실행한 결과 예상대로 작동하는 것으로 확인되었습니다(쓰기 권한이 없으면 파일에 쓰지 않음).

답변1

내 질문에 대한 대답은 Stephen Harris의 의견 섹션에서 나왔습니다. 그는 내가 루트로 스크립트를 실행하면 쓰기 권한이 있는지 여부에 관계없이 스크립트가 모든 파일에 쓸 것이라는 사실을 발견했습니다.

관련 정보