У меня есть сценарий bash с чем-то вроде
while read -r name value
do
....something
done < "test"
Я запускаю этот скрипт как обычный пользователь.
Теперь я хотел сохранить этот файл в домашнем каталоге /root и прочитать его оттуда. Выполнение
while read -r name value
do
....something
done < "/root/path/to/file"
, конечно, я получаю ошибку: ./script: ine xy: /root/path/to/file: Permission Denied
Чем я пытался
while sudo read -r name value
do
....something
done < "/root/path/to/file"
Но это дает мне: sudo: read: unknown command [ ! d6]
Почему я не могу прочитать файл в домашнем каталоге /root, хотя я использую sudo?
EDIT Я пробовал немного дальше и что я не могу даже делать
$> sudo echo "test" /root/.test
[sudo] Password for user:
-bash: /root/.test: Permission Denied
EDIT Он работает так, как я хочу, если я запускаю полный скрипт с помощью sudo ./myscript, но я не хочу этого делать ... там другой путь?
Причина, по которой ваш подход не работает, заключается в том, что вы читаете файл с помощью < «stdin», это означает, что ваша оболочка отвечает за чтение файла и вы запускали его с помощью обычного пользователя, так что у него нет необходимых прав для чтения файла. Теперь вы должны знать, что запуск команды read с помощью sudo не поможет не упоминать, что это встроенная оболочка, которая не может быть запущена с помощью sudo, например cd и т. Д.
Единственное, что вам нужно сделать - это как-то прочитать файл vi root или пользователь / группу с необходимыми привилегиями. Таким образом, вы можете сделать это как:
sudo cat /root/txt | while read -r name value;
do
some command
done
в этом случае только cat будет запущен с sudo.
Однако лучше всего поставить ваш скрипт в [ f11], поэтому каждый имеет доступ для запуска.
Также обратите внимание, что если вы хотите перенаправить что-то в /root/example, вы должны использовать sudo tee:
echo test | sudo tee file
или запустить весь сценарий используя sudo.
Причина, по которой ваш подход не работает, заключается в том, что вы читаете файл с помощью < «stdin», это означает, что ваша оболочка отвечает за чтение файла и вы запускали его с помощью обычного пользователя, так что у него нет необходимых прав для чтения файла. Теперь вы должны знать, что запуск команды read с помощью sudo не поможет не упоминать, что это встроенная оболочка, которая не может быть запущена с помощью sudo, например cd и т. Д.
Единственное, что вам нужно сделать - это как-то прочитать файл vi root или пользователь / группу с необходимыми привилегиями. Таким образом, вы можете сделать это как:
sudo cat /root/txt | while read -r name value;
do
some command
done
в этом случае только cat будет запущен с sudo.
Однако лучше всего поставить ваш скрипт в /usr/local/bin, поэтому каждый имеет доступ для запуска.
Также обратите внимание, что если вы хотите перенаправить что-то в /root/example, вы должны использовать sudo tee:
echo test | sudo tee file
или запустить весь сценарий используя sudo.
Причина, по которой ваш подход не работает, заключается в том, что вы читаете файл с помощью < «stdin», это означает, что ваша оболочка отвечает за чтение файла и вы запускали его с помощью обычного пользователя, так что у него нет необходимых прав для чтения файла. Теперь вы должны знать, что запуск команды read с помощью sudo не поможет не упоминать, что это встроенная оболочка, которая не может быть запущена с помощью sudo, например cd и т. Д.
Единственное, что вам нужно сделать - это как-то прочитать файл vi root или пользователь / группу с необходимыми привилегиями. Таким образом, вы можете сделать это как:
sudo cat /root/txt | while read -r name value;
do
some command
done
в этом случае только cat будет запущен с sudo.
Однако лучше всего поставить ваш скрипт в /usr/local/bin, поэтому каждый имеет доступ для запуска.
Также обратите внимание, что если вы хотите перенаправить что-то в /root/example, вы должны использовать sudo tee:
echo test | sudo tee file
или запустить весь сценарий используя sudo.
/ корневая папка предназначена только для root. Я считаю, что только система может манипулировать файлами там. вы можете попробовать с `su ', но я думаю, что вы получите тот же результат.
во-вторых: не рекомендуется запускать обычные программы с привилегиями root.
при использовании sudo in в командной строке вы вводите пароль и становитесь root. сценарий не может этого сделать. это мера безопасности, которая гарантирует, что кто-то на терминале внесет изменения. также некоторые действия и папки доступны только для системного процесса root.
/ корневая папка предназначена только для root. Я считаю, что только система может манипулировать файлами там. вы можете попробовать с `su ', но я думаю, что вы получите тот же результат.
во-вторых: не рекомендуется запускать обычные программы с привилегиями root.
при использовании sudo in в командной строке вы вводите пароль и становитесь root. сценарий не может этого сделать. это мера безопасности, которая гарантирует, что кто-то на терминале внесет изменения. также некоторые действия и папки доступны только для системного процесса root.
/ корневая папка предназначена только для root. Я считаю, что только система может манипулировать файлами там. вы можете попробовать с `su ', но я думаю, что вы получите тот же результат.
во-вторых: не рекомендуется запускать обычные программы с привилегиями root.
при использовании sudo in в командной строке вы вводите пароль и становитесь root. сценарий не может этого сделать. это мера безопасности, которая гарантирует, что кто-то на терминале внесет изменения. также некоторые действия и папки доступны только для системного процесса root.