我位于:GNU bash,版本 4.4.12(1)-release (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
我希望如果我在 bash 中输入:
./note.sh
我会得到像我输入一样的输出
tree ~/.notes
但我希望这个脚本基本上接受参数,所以如果我输入
./note.sh edit new_note
那么如果 new_note.txt 不存在,
touch ~/.notes/new_note.txt
那么(对我来说是 Gedit)文本编辑器在终端中打开 new_note.txt 进行编辑
else 语句有效,但
./note.sh edit new_note
返回
./note.sh: line 10: /home/username/.notes/testnote.txt: Permission denied
它确实可以触摸,但不能编辑。这里拒绝了什么权限?
提前致谢!我对 shell 脚本和 askubuntu 都很陌生,非常感谢任何帮助
答案1
在 bash 中,默认情况下不设置该变量$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
希望这可以帮助!
答案2
该$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"
或您选择的任何其他编辑器。
答案3
简单来说:在 Debian/Ubuntu 上:运行sensible-editor
。
但是您看到的错误是:
正如其他人提到的,如果EDITOR
为空或未设置,则不带引号的扩展$EDITOR
不会产生任何结果,因此 shell 会将其视为行中的第一个单词,而命令则是后面的文件名。
A引扩展"$EDITOR"
将导致一个空字,当 shell 尝试运行空字符串作为命令时,这将导致令人困惑的错误:
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
它就会做正确的事情。
(即使您的系统可能是单用户系统,也请牢记多用户系统确实存在,即使在台式机上也可以有多个用户。)