Необходимо прочитать страницу Arch Wiki на sudo.
sudo ("заменяют пользователем, делают"), позволяет системному администратору делегировать полномочия, чтобы дать определенным пользователям (или группы пользователей) способность выполнить некоторых (или все) команды как корень или другой пользователь при обеспечении журнала аудита команд и их аргументов.
Можно установить sudo
из репозиториев и затем настраивают его, чтобы позволить Вашему пользователю, jack
, доступ к привилегированным командам путем редактирования /etc/sudoers
. Удостоверьтесь, что Вы делаете это использование visudo
команда.
Дать пользователю jack
полные полномочия пользователя root, Вы добавили бы эту строку:
jack ALL=(ALL) ALL
В нормальных оболочках стиля Границы, таких как Оболочка Bourne, тире, ksh и удар, синтаксис $variable
означает, “принимают значение переменной, разделяют его на отдельные слова где символы от IFS
появитесь, и рассматривайте каждое слово как подстановочный шаблон имени файла и разверните его, если оно соответствует одному из большего количества файла”. Если variable
массив, это происходит с первым элементом массива, и другие элементы проигнорированы.
В zsh, синтаксисе $variable
означает, “принимают, значение переменной, кроме удаляют его, если это пусто”. Если variable
массив, это происходит со всеми элементами массива. Энтузиасты Zsh считают zsh путь выше.
В zsh можно записать $=variable
выполнить разделение слова. Это не лучший способ сделать то, что Вы делаете, все же. Ваша функция удара не справляется с пробелом в именах файлов и использованием $=variable
в zsh не был бы также. Вот другой способ проанализировать аргумент, который работает и в ударе и в zsh и справляется с любым символом кроме :
в имени файла. Если аргумент содержит два двоеточия, то все после первого двоеточия удалено, и часть между первым двоеточием и вторым двоеточием добавляется как отдельный аргумент, которому предшествует a +
знак. Это немного длиннее, чем Ваш код, но менее твердо понять, и это не дросселирует при первой подсказке пространства в имени файла.
vl () {
local suffix
case $1 in
*:*:*) suffix=${1#*:};; set -- "${1%%:*}" "+${suffix%%:*}";;
esac
vim "$@"
}
Это - хитрое :) Одно обходное решение должно определить функцию как это:
vl() { cmd=$(echo $1 | sed -r 's/(.+):([0-9]+).+/\1 +\2/g'); eval "vim $cmd"; }
Обратите внимание, что обходное решение является использованием eval
, не другие незначительные модификации, которые я должен был сделать, потому что я испытываю недостаток в необходимом редактировании-fu stackexchange 8-)
vim $=cmd
. Создание cmd
в массив также вызвал бы wordsplitting: cmd=( $(echo ...) ); vim $cmd
.
– Matt
14.10.2013, 23:32