Почему sudo игнорирует псевдонимы?

Лучший способ сделать это:

for d in `ls -A`; do if [ "$d" != "TTT" ]; then cp -Rf $d TTT; fi; done

копии все каталоги из текущего каталога рекурсивно в каталоге TTT кроме самого TTT. Опция -A в ls позволяет Вам рассматривать все скрытые каталоги и файлы, но не рассматривают специальные файлы. и.. и условие "$d" != "TTT" исключите каталог TTT так для предотвращения себя копия. Можно записать bash сценарий с 2 аргументами сохраняет к локальному или системному мусорному ведру и использует его при необходимости.

23
27.03.2018, 18:42
3 ответа

Ниже я вижу информацию из здесь.

При использовании sudo используйте расширение псевдонима (иначе sudo игнорирует ваши псевдонимы)

alias sudo='sudo '

Причина, по которой оно не работает, объясняется здесь.

Бэш проверяет только первое слово команды на псевдоним, любые слова после этого не проверяются. Это значит, что в такой команде, как sudo ll, только первое слово (sudo) проверяется Bash на псевдоним, ll игнорируется. Мы можем попросить bash проверить следующее слово после псевдонима (т.е. sudo) по команде добавляя пробел в конец значения псевдонима.

36
27.01.2020, 19:41

Псевдонимы и функции определяются в оболочке. Судо - это внешняя программа. Поэтому sudo не видит псевдонимов, функций или сборок оболочки, только внешние команды.

Псевдонимы - это альтернативные имена команд, поэтому оболочки расширяют их только в позиции команд, а не тогда, когда они являются аргументами к командам. Zsh поддерживает глобальные псевдонимы, которые расширяются в любом месте командной строки, и лучше всего использовать их экономно, так как есть риск случайного их расширения даже в условиях, когда псевдоним не имеет смысла.

Можно сказать Судо, чтобы он вызвал оболочку: sudo sh -c "...shell command here..." . Однако, ваши обычные псевдонимы не будут доступны внутри этой команды оболочки, так как они обычно хранятся в файле типа ~/.bashrc или ~/.zshrc, который считывается только интерактивными оболочками.

alias sudo= sudo ', как , предложенный Ramesh, заставляет оболочку расширять псевдонимы после sudo.

6
27.01.2020, 19:41

Я только что дал альтернативный ответ без переопределения Sudo с псевдонимом.

В вашем случае это было бы:

type -a startapp | grep -o -P "(?<=\`).*(?=')" | xargs sudo 

Все в одной строке, без дополнительных оболочек, без переопределений псевдонимов. ; -)

0
27.01.2020, 19:41

Теги

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