Команда sed работает в терминале, но не через bash_aliases или bash-скрипт

Каждый раз, когда Вивальди обновляется, мне нужно запустить эту команду sed, чтобы применить custom.css

sudo sed -i '1s/^/@import "custom.css";/' /opt/vivaldi-snapshot/resources/vivaldi/style/common.css

. Теперь команда отлично работает в терминале, но не тогда, когда я пытаюсь запустить ее, создав псевдоним. в ~ / .bash_aliases или даже через скрипт bash (помещается в / bin / с разрешением на выполнение). Я попытался использовать полный путь для "custom.css", но он все еще не работал. Благодаря.

Редактировать:

(1) Через псевдоним:

alias vivupdate="sed -i '1s/^/@import "custom.css";/' /opt/vivaldi-snapshot/resources/vivaldi/style/common.css"

Когда я пытался бежать, я получаю эту ошибку:

$ sudo vivupdate
[sudo] password for admn:

sudo: vivupdate: command not found
$ 

(2 ) С помощью сценария Bash:

#!/bin/bash
sed -i '1s/^/@import "custom.css";/' /opt/vivaldi-snapshot/resources/vivaldi/style/common.css

создал vivupdate.sh, сделал его исполняемым и поместил его в /bin/.

Затем отредактировал файл sudoers и добавил:

user ALL=(ALL:ALL) NOPASSWD:/bin/vivupdate.sh

Но когда я запускаю скрипт в терминале, я получаю эту ошибку:

sed: couldn't open temporary file /opt/vivaldi-snapshot/resources/vivaldi/style/sedCIt48u: Permission denied
3
задан 21 September 2019 в 20:42

1 ответ

Псевдонимы не доступны sudo. Они характерны для Вашей оболочки и пользователя, и sudo выполняет команды как корень. Поэтому при необходимости в псевдониме, который будет выполнен как корень, необходимо включать sudo в самом определении псевдонима. Кроме того, у Вас есть заключение в кавычки, неправильное в псевдониме там, таким образом, это не работало бы так или иначе. То, что Вы хотите:

alias vivupdate="sudo sed -i '1s/^/@import \"custom.css\";/' /opt/vivaldi-snapshot/resources/vivaldi/style/common.css"

Отметьте, как я вышел из внутренних двойных кавычек (\"). Без этого, так как Вы определяете псевдоним с двойными кавычками, вторая двойная кавычка (тот прежде "custom.css) покажет конец.


Проблема со сценарием из-за как sed -i ведет себя. Хотя это, кажется, редактирует исходный файл, что на самом деле происходит, то, что это сохранило отредактированный файл как временную копию и затем переименовывает файл назад к оригиналу. Однако, так как Вы не выполняете его с sudo, у Вас нет разрешения сделать так. Строка Вы добавили к sudoers файл только означает, что можно работать sudo vivupdate.sh без пароля. Однако все еще необходимо выполнить его как sudo.

Не достаточно добавить команду к sudoers, все еще необходимо назвать его с sudo:

sudo /bin/vivupdate.sh
4
ответ дан 1 December 2019 в 15:48

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

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