Ваш первый аргумент иллюстрирует различие вполне хорошо.
\ls | grep Cases | less
позволяет Вам просмотреть список имен файлов, произведенных ls
и grep
. Не имеет значения, что они, оказывается, имена файлов, они - просто некоторый текст.
\ls | grep Cases | xargs less
позволяет Вам просмотреть файлы, имена которых производятся первой частью команды. xargs
берет список имен файлов, как введено и команды на ее командной строке, и выполняет команду с именами файлов на ее командной строке.
При рассматривании использование xargs
, имейте в виду, что это ожидает вход, отформатированный странным способом: разграниченный пробелом, с \
, '
и "
используемый для заключения в кавычки (необычным способом, потому что \
не специальные внутренние кавычки). Только используйте xargs
если Вы Ваши имена файлов не содержите пробел или \'"
.
Нет, Вы не можете дать под управлением программе полномочия, которые она не имеет, когда она запускается, который был бы дырой в системе безопасности, известной как 'расширение полномочий' ¹.
Две вещи можно сделать:
sudo cp $TMPFILE $FILE
. Обратите внимание, что не рекомендуется использовать mv
для этого из-за изменения в принадлежности файла и полномочиях это, вероятно, вызовет, Вы просто хотите заменить содержание файла не сам заполнитель файла. fg
возвратиться к редактору и сохранить. Не забывайте исправлять полномочия!¹ Некоторые редакторы на самом деле могут сделать это путем запуска нового процесса с различными полномочиями и выдавания данных к тому процессу для сохранения. Посмотрите, например, этот связанный вопрос для других решений в усовершенствованных редакторах, которые позволяют писать буфер файлов в канал процесса. Нано не имеет способности запустить новый процесс или данные передачи к другим процессам, таким образом, это упущено из этой стороны.
Я просто попробовал nano
, и то, что я нашел самым удивительным, является этим, даже не предупреждает Вас, что файл только для чтения, когда Вы начинаете пытаться отредактировать файл. (ОБНОВЛЕНИЕ: По-видимому, нано 2.2 действительно предупреждает; 2.0 не делает.)
Вот (основной) сценарий, который делает это.
Это проверяет, можно ли отредактировать файл, и если Вы не можете, это выполнить "нано" как корень вместо этого.
/usr/local/bin/edit (или ~/bin/edit)
sudo= # empty is false, non-empty is true
editor=nano # XXX check $EDITOR and $VISUAL
if test -e "$1" && test ! -w "$1"; then
if test -t 0 && test -t 2; then
printf "%s is not writable. Edit with sudo? [y/n] " "$1" 1>&2
read -n 1
case $REPLY in
y|Y)
sudo=true
;;
n|N)
sudo=
;;
*)
printf "\nExpected y or n. Exiting.\n" 1>&2
exit 1
;;
esac
else
printf "%s is not writable. Fix the permissions or run \"view\" instead." "$1" 1>&2
exit 1
fi
fi
${sudo:+sudo} "$editor" "$1"
И команда я звонил view
так, чтобы можно было избежать подсказки, если Вы знаете, что не собираетесь вносить любые изменения.
/usr/local/bin/view (или ~/bin/view)
editor=nano
readonlyflag=-v
"$editor" $readonlyflag "$1"
Уже существует названная программа view
это - часть Vi/Vim, поэтому не стесняйтесь предлагать лучшее имя.
(Но я думаю, что полное внедрение этой программы сделало бы Vi view
избыточный.)
Полные версии
[ Read ... lines (Warning: No write permission) ]
то, что появляется прямо выше двух строк справки для ярлыков (нижняя часть экрана). Нано версия 2.2.4.
– 0xC0000022L
07.05.2011, 01:28
Я выбрал этот подход... Я могу использовать меньше, если хочу просмотреть файл... Так что я блокирую себя от открытия файлов, недоступных для записи, с помощью nano.
function nano () {
if [ ! -f "${@: -1}" ] || [ -w "${@: -1}" ]; then
/bin/nano $@
else
echo "Write permission is NOT granted on ${@: -1}"
fi
}
:w !sudo tee
– 24.04.2011, 19:41