如果我尝试编辑一个我没有写权限的文件,并且为此创建了一个别名,我想编写一个 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
查看它去了哪里。