背景
我正在构建一个小东西来加速开发,基本上我已经厌倦了记住foreman run python app.py db migrate
和bundle exec rake db:migrate
等现代框架强加给我的东西。
是https://github.com/michaeldfallen/butler
我正在考虑在默认shell中运行命令,因为每个人都有自己的首选项,这样您就可以访问通常在您路径上的所有内容。
我的尝试是在这里巴特勒/拉/3。
问题
问题是在非交互模式下运行shell会导致它不运行您的rcfile(~/.bashrc
、~/.zshrc
等)。
因此,如果某些命令是在rcfile中定义的别名,或者它们被添加到rcfile的PATH中,那么您希望能够使用的命令可能不存在。
(我还没有实际测试PATH,可能是因为你启动了bash,你实际上把shell作为当前脚本的子shell运行,所以仍然可以访问路径,这只是一个假设)
问题
有没有办法在命令模式下启动shell并让它运行rcfile?
如果没有,有没有办法在设置参数的同时运行命令(可能在当前进程派生的子shell中),以便$1、$2、$@在命令中仍然有效?
我试过:
execute() {
local command="$1";shift;
local args=$@
set -- $args
$command
}
其中用法是execute "echo \"Hello, $1 $2!\"" "Michael" "Allen"
,但输出是"Hello, $1 $2!"
,因此很明显它没有进行arg替换。
3条答案
按热度按时间bxpogfeg1#
有没有办法在命令模式下启动shell并让它运行rcfile?
当然有,你的rc文件和其他东西一样只是shell脚本。
或
你就可以走了。
o2g1uqev2#
问题是在非交互模式下运行shell会导致它不运行您的rcfile(~/.bashrc、~/.zshrc等)。
在
~/.bash_profile
中,添加以下行:(If用户没有
~/.bash_profile
,则将其添加到他的~/.bash_login
或~/.profile
。)对其他壳执行类似操作。
b0zn9rqh3#
如果您不介意保留输出,那么在大多数shell中(我检查了bash、csh、zsh、ksh、tcsh)-i表示交互式。
如果你想把它放在后台,把它放在一个分离的屏幕会话(或tmux)中,如果你不想调用它,但仍然保持关注它,可以选择把它记录到一个文件中。