Я нахожусь в: удар GNU, версия 4.4.12 (1) - выпуск (x86_64-pc-linux-gnu)
сценарий: (note.sh)
#! /bin/bash
edit="edit"
if [[ $edit = $1 ]]
then
touch ~/.notes/"$2".txt
$EDITOR ~/.notes/"$2".txt
else
tree ~/.notes
fi
Я надеялся, ввел ли я в ударе: ./note.sh
Я произвожусь, как будто я ввел tree ~/.notes
Но я хочу, чтобы этот сценарий в основном принял аргументы, поэтому если я ввел ./note.sh edit new_note
затем, если new_note.txt не существует, touch ~/.notes/new_note.txt
затем (Gedit для меня) текстовый редактор, открытие new_note.txt в терминале для редактирования
еще работы оператора, но ./note.sh edit new_note
возвраты
./note.sh: line 10: /home/username/.notes/testnote.txt: Permission denied
Это делает касание, но не редактора. Чему отказывают в разрешении здесь?
Заранее спасибо! Я являюсь очень новым, чтобы и окружить сценарии и askubuntu и очень ценить любую справку
В ударе переменная $EDITOR
не установлен по умолчанию. Однако существует команда, которая вызовет редактора по умолчанию.
Для этой команды это:
editor <filename>
Установить команду на Ваш выбор:
sudo update-alternatives --config editor
Пример:
terrance@terrance-ubuntu:~$ sudo update-alternatives --config editor
There are 3 choices for the alternative editor (providing /usr/bin/editor).
Selection Path Priority Status
------------------------------------------------------------
0 /bin/nano 40 auto mode
1 /bin/ed -100 manual mode
2 /bin/nano 40 manual mode
* 3 /usr/bin/vim.tiny 10 manual mode
Press <enter> to keep the current choice[*], or type selection number:
После выбора Вашего редактора по умолчанию затем все необходимо сделать для вызова, это в сценарии:
editor ~/.notes/"$2".txt
Надеюсь, это поможет!
$EDITOR
переменная не установлена, таким образом, это - пробел при достижении той строки. Отъезд ~/.notes/"$2".txt
для bash
звонить.
Так bash
затем попытки выполниться /home/username/.notes/testnote.txt
который дает разрешение, отклоненное, потому что нет никакого исполняемого набора флага для файла.
Как Terrance, уже упомянутый, назовите команду editor
непосредственно или присвойте действительный текстовый редактор переменной $EDITOR
.
EDITOR="/usr/bin/vi"
или
EDITOR="/usr/bin/vim"
или
EDITOR="/bin/nano"
или любой другой редактор по Вашему выбору.
Вкратце: На Debian/Ubuntu: выполненный sensible-editor
.
Но об ошибке Вы видите:
Поскольку другие упомянули, если EDITOR
пусто или не набор, неупомянутое расширение $EDITOR
результатами ни в чем, поэтому что оболочка рассматривает как первое слово на строке, и как команда, является имя файла, которое прибывает после.
Заключенное в кавычки расширение "$EDITOR"
привел бы к пустому слову, которое даст Вам запутывающую ошибку, когда оболочка попытается выполнить пустую строку как команду:
bash: : command not found
Вы, вероятно, хотите установить нейтрализацию в случае EDITOR
не установлен. Можно использовать ${par:-word}
расширение для этого. Например. "${EDITOR:-vi}"
использовал бы значение EDITOR
, и если это пусто или сброс, отступите к vi
.
Затем существует также VISUAL
, который в значительной степени выполняет ту же функцию, таким образом, Вы могли проверить обоих: "${VISUAL:-${EDITOR:-vi}}"
.
На Ubuntu и других находящихся в Debian системах необходимо использовать sensible-editor
(вместо editor
, vi
или nano
) так как это позволяет установку в расчете на пользователя редактора по умолчанию, в отличие от этого, editor
который зависит от символьной ссылки в масштабе всей системы, установленной update-alternatives
.
sensible-editor
также проверки VISUAL
и EDITOR
, таким образом, Вы не должны проверять их явно, но могли просто работать sensible-editor $file
и это сделает правильную вещь.
(Даже если Ваш может быть однопользовательской системой, хорошо иметь в виду, что многопользовательские системы действительно существуют, и у Вас могут быть многочисленные пользователи даже на настольной машине.)