使用rcfile以非交互模式启动shell

时间:2015-04-10 21:37:40

标签: bash shell sh

背景

我为加快开发建立一个小东西,基本上我厌倦了记住现代框架强加给我的foreman run python app.py db migratebundle 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替换。

2 个答案:

答案 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

对其他炮弹也一样。