Как заключить команду с перенаправлением на выполнение с помощью sudo - PullRequest
0 голосов
/ 27 апреля 2020

Извините, если название вводит в заблуждение, я не могу думать, как его написать.

Внутри скрипта я пытаюсь передать команду с перенаправлением в функцию для ее выполнения с помощью sudo , Функция доказала свою работоспособность с обычными командами, но поскольку эта команда имеет перенаправление, она пытается выполнить перенаправление вне функции и выдает ошибку из-за разрешений. Я пытался заключить всю команду в $( ), но это создает новый env, это не то, что я хочу (тоже не удается). Вот пример того, что я пытаюсь сделать:

#!/bin/bash

execute_command() {
  local input=$@
  sudo bash -c "$input"
}

execute_command echo "Content of file: $content" > /etc/myfile
execute_command $(echo "Content of file: $content" > /etc/myfile) # Also fails

1 Ответ

1 голос
/ 27 апреля 2020

Вам нужно передать одну строку:

execute_command 'echo "..." > /etc/myfile'

Я бы рекомендовал не пытаться определить такую ​​функцию общего назначения; перенаправление происходит до запуска execute_command (и, следовательно, sudo). Вместо этого просто используйте sudo непосредственно для выполнения команды, которая должна открыть файл.

echo "..." | sudo tee /etc/myfile > /dev/null
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...