-w bashの文が機能しない場合のフラグ

-w bashの文が機能しない場合のフラグ

ファイルに書き込み権限があることを確認する簡単なスクリプトがあります。その場合、ユーザーはファイルの末尾にいくつかのテキストデータを追加できます。そうでない場合、そのユーザーは追い出されます。

私はプログラミング知識を使ったシェルスクリプト学習のYouTubeシリーズに従います。特にビデオ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は、私がスクリプトをrootとして実行していることを確認し、ファイルに書き込み権限がない場合でも、rootがファイルに書き込むことを強調しました。 sudoユーザーを作成してスクリプトを再実行したところ、期待どおりに機能することが確認されました(書き込み権限がないとファイルに書き込まれません)。

答え1

私の質問に対する答えは、Stephen Harrisのコメントセクションにあります。彼は私がrootでスクリプトを実行すると、書き込み権限があるかどうかにかかわらず、スクリプトがすべてのファイルに書き込むことを発見しました。

関連情報