shell 脚本中的 sudo 问题

shell 脚本中的 sudo 问题

如果我尝试编辑一个我没有写权限的文件,并且为此创建了一个别名,我想编写一个 shell 脚本来使用 sudo 运行 VI

    alias vi=my_script.sh

    #!/bin/bash
    file=$1

    if [ -r $file ]
    then
       /usr/bin/vi $file
    else
       sudo /usr/bin/vi $file
    fi        

但是,无论如何,当尝试编辑时,比如说 /etc/hosts,我仍然不被允许编辑它。

我究竟做错了什么?

答案1

我已经修改了你的脚本以便可以工作

#!/bin/bash
file=$1
wown=$(/bin/ls -alF $file | awk '{print $3}')

if [ -r $file ] && [ $wown == $USER ]
then
    /usr/bin/vi $file
else
    sudo /usr/bin/vi $file
fi

如果您希望从任何地方直接从访问它,您可以将它放在 PATH 中(如~/bin/),而不是为其创建别名。

答案2

好的,假设灰色部分是您的,my_script.sh那么有几个问题。首先,需要在您的文件中设置别名,.bashrc而不是在文件中。更多详细信息请点击这里

现在,脚本中的测试-r将检查文件是否可读,而不是是否可编辑。您可能有读取权限,但没有写入权限。因此,您应该尝试

#! /bin/bash

if test -w $1 
then
   /usr/bin/vi $1
else
   sudo /usr/bin/vi $1
fi

这应该可行。我想补充的一条建议是,如果您在使用 bash 脚本时遇到问题:用 echo 语句覆盖它!在开头处放一个,检查它是否打开,在语句的每一侧放一个,if查看它去了哪里。

相关内容