У меня есть псевдоним, который передает некоторые параметры инструменту, который я часто использую. Иногда я бегаю как сам, иногда под sudo. К сожалению, конечно, sudo не распознает псевдоним.
У кого-нибудь есть подсказка о том, как пропустить псевдоним?
В этом случае у меня есть куча вариантов для Perl, когда я отлаживаю:
alias pd='perl -Ilib -I/home/myuser/lib -d'
Иногда мне приходится отлаживать свои инструменты от имени пользователя root, поэтому вместо запуска:
pd ./mytool --some params
Мне нужно запустить его под sudo. Я пробовал много способов:
sudo eval $(alias pd)\; pd ./mytool --some params
sudo $(alias pd)\; pd ./mytool --some params
sudo bash -c "$(alias pd)\; pd ./mytool --some params"
sudo bash -c "$(alias pd); pd ./mytool --some params"
sudo bash -c eval\ "$(alias pd)\; pd ./mytool --some params"
sudo bash -c eval\ "'$(alias pd)\; pd ./mytool --some params'"
Я надеялся на хороший, краткий способ гарантировать, что мой текущий псевдоним pd был полностью использован (на случай, если мне понадобится настроить его позже), хотя некоторые из моих попыток не были краткими. Мое последнее средство - поместить его в сценарий оболочки и поместить в то место, которое sudo сможет найти. Но псевдонимы иногда очень удобны, так что это последнее средство.
A trailing space in value causes the next word to be checked for alias substitution when the alias is expanded.
sudo
снова, в то время как желание сохранить этотsudo
-passthrough трюк в то же время. Даже это можно сделать: чтобы снова использовать опции, используйте\sudo
. Обратная косая черта переопределит псевдоним. (Многие, кажется, не знают об этом). Таким образом, вы можете ( опасность! ) Даже удалять файлы без какого-либо предупреждения, переопределяяalias rm='rm -i'
обычно указанное в.bash-aliases
, просто набирая\rm file-to-delete
.Я не совсем понимаю, что вы пытаетесь сделать. Я вижу два пути:
Правильный путь
alias pd='sudo perl -Ilib -I/home/myuser/lib -d'
Затем выполнение
pd ./mytool
выполнит вашу команду отладки как root, но все равно сохранит преимущества sudo (контрольный журнал, не работающий из корневой оболочки).Пример:
Легкий путь
Добавьте псевдонимы к root'ам
.bashrc
и используйтеsudo -i
всякий раз, когда вы используете sudo для root.источник
Просто имейте два псевдонима и используйте переменную
Я не вижу причины для использования
awk
илиcut
разве только для того, чтобы псевдоним ядра был определен только один раз, чтобы его было легче модифицировать. Если это так, то это работает:Вот упрощенная функция для создания пар псевдонимов, таких как приведенная выше:
Использовать:
Теперь у вас есть
pd
иspd
плюсct
иsct
.источник
Хотел бы я отметить два ответа как «правильные». Комбинируя правильный путь из проницательного поста Insyte , с решением awk (или cut) от Билла Вайса , я придумал это:
Теперь я просто пойду и вставлю это в функцию оболочки в моем .bashrc или что-то в этом роде, а затем создаю «s» версии всех моих псевдонимов, которые я хочу запустить как root.
Обновление : небольшая модификация упрощенной функции Денниса Уильямсона, чтобы сделать ее немного проще в использовании:
Это означает, что я просто должен поставить «s» перед всей командой. Вместо того:
Я просто добавляю s спереди.
И я сделал. Конечно, компьютер выполняет немного больше работы, но для этого и нужен компьютер. :-)
Благодарность!
источник
alias sudo="sudo "
работает отлично.с http://www.shellperson.net/using-sudo-with-an-alias/
источник
Разве не было бы проще просто взломать скрипт, включающий ваши параметры, а затем поместить его где-нибудь в одну из папок, которая является путем для обычной учетной записи и root? Это действительно не займет много сценария.
источник
Это грубо, но это работает здесь:
источник
Добавьте префикс "sudo" к выбранным псевдонимам и командам изнутри
~/.bashrc
так:источник
alias sudo="sudo "
проще, хотя.Как выложили несколько раз, сделайте в '.bashrc':
псевдоним sudo = 'sudo'
Причина, по которой объясняется в «man bash» и «псевдониме помощи»:
псевдоним: псевдоним [-p] [имя [= значение] ...] Определение или отображение псевдонимов.
источник
Вы хотите что-то вроде этого:
источник
bash -i
(я = интерактивный) только v4.0. Так что на более старом сервере, на котором все ещеbash
запущен v3, это, скорее всего, приведет к сбою. Но докажите, что я не прав, кто угодно, продолжайте;)-i
это оболочка Борна, см. pubs.opengroup.org/onlinepubs/009695399/utilities/sh.html#!/bin/bash -i
после Шебанга, что, очевидно, не то же самое (?). Чтобы вырезать Короче говоря, используяhistory
вbash
скрипте (а не на «живой» в командной строке) будет требовать-i
вариант, который я не смог заставить работать на сервере с «только»bash
v3 установлен. И это факт.Я не знаю, лучше ли это делать на производственной коробке, но локально я использую
источник
Можете ли вы добавить псевдоним в корневой каталог .bashrc или просто запустить .bashrc через sudo перед вашей командой?
источник