【发布时间】:2021-12-07 06:21:09
【问题描述】:
我想将短 python 脚本的文本嵌入到 bash 脚本中,例如我的.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)] % "
不过,这种方法对我来说有点好笑,我想知道这种方法的替代方法可能是什么。
我的 bash 脚本编写技能非常初级,所以我特别想知道从 bash 解释器的角度来看我是否在做一些愚蠢的事情。
【问题讨论】:
-
你能更清楚地说出你真正想要做什么吗?据我所知,Python 并不是真正需要的。你可以用 shell 做大部分事情。
-
@ghostdog74:没有什么比我说的更深刻了;我只是一个比 bash 程序员更好的 python 程序员,而且 IMO python 通常比 bash 更强大。在 python 中实现 bash 脚本中使用的功能可能很方便,并且有时在这样做时不依赖于外部文件。我终于从 tcsh 切换到 bash(15 年后),我正试图将外壳弯曲到我的意愿/偏好。
-
-1:为什么不简单地创建一个 .py 模块文件?当更好的解决方案是(通常)完全停止使用 shell 时,为什么要强制 Python 进入 shell 脚本?
-
@S.Lott:就我而言,我将 bash 脚本作为 Alfred 命令运行,但需要 Python 的拆分功能。创建 .py 文件会增加不必要的开销。