运行 MacOS High Sierra 10.13.5
再会!今天,我尝试在我的脚本中编写一个脚本,.bash_profile
以允许我使用单个命令调用 Sublime Text,sublime
.
这是我用我有限的 bash 知识以及一些研究制作的脚本:
sublime_open() # Function which opens the first argument as a text file in Sublime.
{
open -a /Applications/Sublime\ Text.app < $1.txt;
}
export -f sublime_open;
sublime_test() # Function which will open first argument as a text file in Sublime,
{ # creating one if it does not exist in the current directory.
if [ -e "$1" ];
then sublime_open "$1"
else
touch "$1".txt
sublime_open("$1")
fi
}
export -f sublime_test
alias sublime="sublime_test"
export sublime
为了可读性,我将函数分成了两部分。
预期行为:
sublime foo
打开一个 Sublime 实例到文件 foo.txt,如果该文件不存在则创建该文件。
观察到的行为:
Bash 返回:
第 29 行:语法错误:文件意外结束
请注意,第 29 行是文件最后一行之后的行,该行不存在。
解决方案的尝试:
到目前为止,我已经在这里和这里搜索了解决方案。
我试过了:
sublime_open()
部分。对不起,如果我的脚本是基本的或不知情的,这是我第一次尝试编写具有这种行为的脚本。我欢迎超出我的问题范围的帮助或提示。
提前致谢!
编辑:根据@jwodder 的解决方案修复了误用的 heredoc 以及根据@codeforester 的解决方案不正确的函数调用。
编辑 2:如果您正在为同一问题寻找更优雅的解决方案,请查看这个非常有用的要点。
问题是这一行:
open -a /Applications/Sublime\ Text.app << $1.txt;
我假设您这样做的意思是$1.txt
在标准输入上将内容提供给 Sublime Text。但是,这将通过一个来完成<
,而不是两个。使用两个<
,你会得到一个heredoc,这意味着 bash 将寻找包含 just 的下一行$1.txt
,并将使用中间的所有行作为 Sublime Text 的输入。由于文件在 bash 找到仅包含 的行之前结束$1.txt
,您会收到“意外的文件结尾”错误。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句