bash 中的 -w 标志 if 语句不起作用

bash 中的 -w 标志 if 语句不起作用

我有一个简单的脚本,用于检查文件是否具有写入权限。如果是,则它允许用户将一些文本数据附加到文件末尾。如果否,则会将用户踢出。

我正在关注通过ProgrammingKnowledge 学习 Shell 脚本的 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

我的问题的答案来自斯蒂芬·哈里斯的评论部分。他发现我以 root 身份运行脚本,无论是否有写权限,该脚本都会写入任何文件。

相关内容