Я хочу создать сценарий оболочки для запуска VI с помощью sudo, если я попытаюсь отредактировать файл, для которого у меня нет разрешения на запись, и для этого я создал псевдоним
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, мне все равно не разрешено редактировать его.
Что я делаю не так?
Я изменил ваш скрипт, чтобы он работал
#!/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/
), а не создавать для него псевдоним.
Хорошо, если предположить, что бит серого цвета - это 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
, чтобы увидеть, куда он идет.