Разница между командой "sudo su ls" и "sudo ls" [дубликат]

Другими словами, я ищу способ запустить скрипт из вставки , или вставить его во временный файл и запустить "на месте" без {{ 1}} сохранение любого файла --- Для запуска всего нужно минимум кликов и вставок.

Предполагая, что ваша интерактивная оболочка представляет собой Bash или совместимую оболочку - вы ищете это:

bash << 'EOT'

<PASTE SCRIPT HERE>

EOT

Вышеупомянутая практика кода называется «Heredoc» (сокращение от «Here document»), и я использовал ее для выполнения всех команд. до EOT в новой суб-оболочке.

Таким образом, вы можете изменить рабочий каталог или среду. Обратите внимание, что EOT не является ключевым словом, поэтому вы можете использовать любую фразу вместо EOT (просто убедитесь, что написание одинаково как в начале, так и в конце heredoc).

Одиночные кавычки заключаются в . EOT используется для указания родительской оболочке , а не выполнять какие-либо подстановки в наследственном документе. Это предотвращает, например, расширение переменной родительской оболочкой вместо дочерней оболочки.

В качестве конкретного примера:

sylvain@bulbizarre:~$ bash << 'EOT'
echo hello
cd /
echo We are in ${PWD}
EOT

hello
We are in /
sylvain@bulbizarre:~$   # <-- I'm still in my home directory when
                        #     back to the interactive shell

Другими словами, я ищу способ запустить скрипт из вставки или вставить его во временный файл и запустить "в- place " без сохранения какого-либо файла --- Для запуска всего требуется наименьшее количество кликов и вставок.

Если вы хотите сохранить копию выполненной команды, вы можете использовать этот вариант:

sylvain@bulbizarre:~$ tee /tmp/saved.sh << 'EOT' | bash
echo hello
cd /
echo We are in ${PWD}
EOT

hello
We are in /

sylvain@bulbizarre:~$ cat /tmp/saved.sh 
echo hello
cd /
echo We are in ${PWD}
2
18.09.2017, 04:14
1 ответ

На самом деле упомянутые вами команды выполняют две разные задачи.

  • su— это программа, используемая для переключения на другого пользователя. Если вы выполняете su <user>, вы запускаете сеанс оболочки как другой пользователь .
  • sudoпозволяет запускать одну команду от имени пользователя root.
  • sudo suпозволяет запускать suот имени пользователя root. Если вы выполняете sudo su <user>, вы запускаете сеанс оболочки как пользователь .

Затем,

  • sudo su lsзапустит оболочку от имени пользователя ls, если он существует.
  • sudo lsотобразит содержимое каталога так же, как если бы команда была введена пользователем root.

Если вас интересуют две эквивалентные команды, вы можете рассмотреть...

sudo bash -c "ls"       # execute "ls" as the root
sudo ls                 # execute "ls" as the root
4
27.01.2020, 22:03

Теги

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