背景
我为加快开发建立一个小东西,基本上我厌倦了记住现代框架强加给我的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?
如果没有任何方法可以运行命令(可能是在当前进程中生成的子shell中),同时设置args以便$ 1,$ 2,$ @ all仍在命令中工作?
我曾尝试过:
execute() {
local command="$1";shift;
local args=$@
set -- $args
$command
}
其中使用量为execute "echo \"Hello, $1 $2!\"" "Michael" "Allen"
,但输出为"Hello, $1 $2!"
,因此显然它没有进行arg替换。
答案 0 :(得分:0)
有没有办法在命令模式下启动shell并让它运行rcfile?
当然有。你的rcfiles就像shell脚本一样。
source ~/.bashrc
或
source ~/.zshrc
你很高兴。
答案 1 :(得分:0)
问题是在非交互模式下运行shell会导致它 不运行你的rcfile(〜/ .bashrc,〜/ .zshrc等)。
在~/.bash_profile
中,添加以下行:
[ -f ~/.bashrc ] && . ~/.bashrc
(如果用户没有~/.bash_profile
,请将其添加到~/.bash_login
或~/.profile
。
对其他炮弹也一样。