Почему удар отклоняет мое разрешение сценария оболочки открыть текстовый файл с текстовым редактором по умолчанию?

Я нахожусь в: удар 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 и очень ценить любую справку

5
задан 17 February 2018 в 08:48

3 ответа

В ударе переменная $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

Надеюсь, это поможет!

11
ответ дан 23 November 2019 в 08:41

$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"

или любой другой редактор по Вашему выбору.

6
ответ дан 23 November 2019 в 08:41

Вкратце: На 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 и это сделает правильную вещь.

(Даже если Ваш может быть однопользовательской системой, хорошо иметь в виду, что многопользовательские системы действительно существуют, и у Вас могут быть многочисленные пользователи даже на настольной машине.)

0
ответ дан 23 November 2019 в 08:41

Другие вопросы по тегам:

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