bash、zsh、fish等 shell 语言与上述脚本语言之间有什么区别,使它们更适合 shell?
使用命令行时,shell 语言似乎要容易得多。对我来说,使用 bash 比在 ipython 中使用 shell 配置文件要顺畅得多,尽管有相反的报道。我认为大多数人都会同意我的观点,Python 中的大部分中型到大型编程比 bash 更容易。我使用 Python 作为我最熟悉的语言,Perl 和 Ruby 也是如此。
我试图阐明原因,但除了假设两者中对字符串的不同处理与此有关之外,我无法阐明原因。
这个问题的原因是我希望开发一种在两者中都可用的语言。如果你知道这种语言,也请张贴。
正如 S.Lott 所解释的,这个问题需要澄清一下。我在询问 shell语言的特性与脚本语言的特性。所以比较不是关于各种交互式(REPL)环境的特性,例如历史和命令行替换。该问题的另一种表达方式是:
一种适用于复杂系统设计的编程语言能否同时表达有用的单行代码,可以访问文件系统或控制作业?一种编程语言可以有效地扩展和缩减吗?
我想在bash脚本中嵌入短python脚本的文本,比如说,我的.bash_profile.做这样的事情最好的方法是什么?
我到目前为止的解决方案是使用-c选项调用python解释器,并告诉解释器exec它读取的内容stdin.从那里,我可以构建如下的简单工具,允许我处理文本以在我的交互式提示中使用:
function pyexec() {
echo "$(/usr/bin/python -c 'import sys; exec sys.stdin.read()')"
}
function traildirs() {
pyexec <<END
trail=int('${1:-3}')
import os
home = os.path.abspath(os.environ['HOME'])
cwd = os.environ['PWD']
if cwd.startswith(home):
cwd = cwd.replace(home, '~', 1)
parts = cwd.split('/')
joined = os.path.join(*parts[-trail:])
if len(parts) <= trail and not joined.startswith('~'):
joined = '/'+joined
print joined
END
}
export PS1="\h [\$(traildirs 2)] % "
Run Code Online (Sandbox Code Playgroud)
这种方法虽然闻起来有点滑稽,但我想知道这样做的替代方法可能是什么.
我的bash脚本编写技巧非常简陋,所以我特别感兴趣的是,从bash解释器的角度来看,我是否正在做一些愚蠢的事情.