【发布时间】:2015-04-10 21:37:39
【问题描述】:
背景
我正在构建一个加速开发的小东西,基本上我已经厌倦了记住现代框架强加给我的 foreman run python app.py db migrate 和 bundle exec rake db:migrate 等。
我是https://github.com/michaeldfallen/butler。
我正在考虑在您的默认 shell 中运行命令,因为每个人都有自己的偏好,因此您可以访问通常在您的路径上的所有内容。
我的尝试在这里butler/pull/3。
问题
问题是在非交互模式下运行 shell 会导致它无法运行您的 rcfile(~/.bashrc、~/.zshrc 等)。
因此,如果您希望能够使用的某些命令是在您的 rcfile 中定义的别名,或者如果它们被添加到您的 rcfile 的 PATH 中,则它们可能不存在。
(实际上并没有测试 PATH 路径,可能是因为您启动 bash 后,您实际上将 shell 作为当前脚本的子 shell 运行,因此仍然可以访问路径,这只是一个假设)
问题
有没有什么办法可以在命令模式下启动一个shell并让它运行rcfile?
如果没有,是否有任何方法在设置 args 时运行命令(可能在从当前进程生成的子 shell 中)以使 $1、$2、$@ 仍然在命令中工作?
我试过了:
execute() {
local command="$1";shift;
local args=$@
set -- $args
$command
}
用法是 execute "echo \"Hello, $1 $2!\"" "Michael" "Allen" 但输出是 "Hello, $1 $2!" 很明显它没有进行 arg 替换。
【问题讨论】: