Проблемы с sudo внутри скрипта

Я хочу создать сценарий оболочки для запуска 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, мне все равно не разрешено редактировать его.

Что я делаю не так?

0
задан 27 December 2013 в 16:03

2 ответа

Я изменил ваш скрипт, чтобы он работал

#!/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/), а не создавать для него псевдоним.

0
ответ дан 27 December 2013 в 16:03

Хорошо, если предположить, что бит серого цвета - это 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, чтобы увидеть, куда он идет.

0
ответ дан 27 December 2013 в 16:03
  • 1
    это действительно не открывает порт, ни настраивает совместное использование сетевого соединения, ни настраивает NAT. Почему мы удаляющий что-то скорее тогда понимающее, что OP хочет и уведомление конфигурации. – Panther 18 June 2015 в 05:55

Другие вопросы по тегам:

Похожие вопросы: