如何配置Console2/Git Bash以在不同的选项卡中运行不同的脚本?

如何配置Console2/Git Bash以在不同的选项卡中运行不同的脚本?,git,bash,console2,Git,Bash,Console2,首先,我对可能不正确的术语表示歉意。我是在windows背景下做这件事的,只有windows和DOS知识来表达我的需求 背景 我使用Console2在两个不同的选项卡中运行Git Bash 这些选项卡设置为在不同的工作目录中启动,以便默认使用2个不同的存储库 我创建了一组别名来简化我使用GIT的方式。 这些文件当前位于我的用户文件夹中的.bash_配置文件中 .bash_配置文件似乎是旧DOS autoexec.bat文件的linux等效文件。因此,我的别名是为启动git sh.exe的任何选项

首先,我对可能不正确的术语表示歉意。我是在windows背景下做这件事的,只有windows和DOS知识来表达我的需求

背景

我使用Console2在两个不同的选项卡中运行Git Bash

这些选项卡设置为在不同的工作目录中启动,以便默认使用2个不同的存储库

我创建了一组别名来简化我使用GIT的方式。 这些文件当前位于我的用户文件夹中的.bash_配置文件中

.bash_配置文件似乎是旧DOS autoexec.bat文件的linux等效文件。因此,我的别名是为启动git sh.exe的任何选项卡设置的

有人告诉我,如果我将hg.exe(mercurial)放在路径上,那么我就能够以这种方式使用hg和Git。 事实证明这是正确的

我的目标是什么

我希望能够配置不同的选项卡,以使用不同的别名

在这个特定的例子中,我希望能够设置一个仍然运行GitBash(sh.exe)的HG选项卡,但它会初始化一组不同的别名

我想我需要

  • 为每组别名创建不同的“bat文件”
  • 将Console2配置为使用不同的“bat文件”作为不同选项卡的autoexec
问题


如何调整安装控制台2选项卡(当前启动sh.exe),使其在启动时传递要运行的“命令”文件的名称?

您可以将脚本的名称传递给bash.exe,它将运行它。请记住,bash希望路径是UNIX样式的,例如,它希望路径像
/cygdrive/C/temp/myscript.sh
一样,而不是
C:\temp\myscript.sh

有关调用bash的更多信息

(如果需要,可以使用cygpath.exe自动执行此翻译。我有一个示例。)


Update听起来像是要使用
--init file
--rcfile
并在那里指定启动命令。

您可以将脚本的名称传递给bash.exe,它将运行它。请记住,bash希望路径是UNIX样式的,例如,它希望路径像
/cygdrive/C/temp/myscript.sh
一样,而不是
C:\temp\myscript.sh

有关调用bash的更多信息

(如果需要,可以使用cygpath.exe自动执行此翻译。我有一个示例。)


更新听起来像是要使用
--init file
--rcfile
并在那里指定启动命令。

编写别名更合理,以便它们在不同的环境中表现不同。行为选择器可以是当前目录的名称,也可以是当前目录中是否存在标志文件;别名或脚本文件可能包含此代码,或者启动脚本可能源于不同的文件,或者只是根据选择器设置不同的路径

像这样,;在
.bashrc
中,添加

test -e .git && . ~/bin/gitalises.sh
test -e .hg && . ~/bin/hgaliases.sh
或者像这样,

test -e .git && PATH=~/bin/git:$PATH   # put co for git in ~/bin/git/co
test -e .hg && PATH=~/bin/hg:$PATH     # and ditto for ~/bin/hg/co
test -e .git && VC=git
或者像这样,

test -e .git && PATH=~/bin/git:$PATH   # put co for git in ~/bin/git/co
test -e .hg && PATH=~/bin/hg:$PATH     # and ditto for ~/bin/hg/co
test -e .git && VC=git
然后在命令行上,您可以随时设置
VC=hg
,只要您的脚本(或别名;但我建议使用函数或脚本)如下所示

case $VC in
  git) git --gobble=gook "$@";;
  hg) hg bbq a/c "$@";;
  *) echo "err um uh" >&2 ;;
esac

这还取决于别名中有多少共享代码;某个东西的
hg
别名与某个东西的
git
别名有很大不同吗?然后分别维护它们。或者将共享代码封装在双方都使用的公共源文件中。

编写别名以便它们在不同环境中表现不同更为合理。行为选择器可以是当前目录的名称,也可以是当前目录中是否存在标志文件;别名或脚本文件可能包含此代码,或者启动脚本可能源于不同的文件,或者只是根据选择器设置不同的路径

像这样,;在
.bashrc
中,添加

test -e .git && . ~/bin/gitalises.sh
test -e .hg && . ~/bin/hgaliases.sh
或者像这样,

test -e .git && PATH=~/bin/git:$PATH   # put co for git in ~/bin/git/co
test -e .hg && PATH=~/bin/hg:$PATH     # and ditto for ~/bin/hg/co
test -e .git && VC=git
或者像这样,

test -e .git && PATH=~/bin/git:$PATH   # put co for git in ~/bin/git/co
test -e .hg && PATH=~/bin/hg:$PATH     # and ditto for ~/bin/hg/co
test -e .git && VC=git
然后在命令行上,您可以随时设置
VC=hg
,只要您的脚本(或别名;但我建议使用函数或脚本)如下所示

case $VC in
  git) git --gobble=gook "$@";;
  hg) hg bbq a/c "$@";;
  *) echo "err um uh" >&2 ;;
esac

这还取决于别名中有多少共享代码;某个东西的
hg
别名与某个东西的
git
别名有很大不同吗?然后分别维护它们。或者将共享代码封装在双方使用的公共源文件中。

以下内容适用于我使用Console2的情况。它使用Cygwin的bash shell和Cygwin$HOME目录中的.bash_配置文件

<path_to_cygwin>\bin\bash.exe --login -i -c "cd /cygdrive/c/Cygwin/home/<username>; exec /bin/bash --init-file .bash_profile
\bin\bash.exe--login-i-c“cd/cygdrive/c/Cygwin/home/;exec/bin/bash--init file.bash_profile

只需在shell启动时将
.bash_profile
替换为您想要的源文件(显然使用您自己的用户名和路径)。

以下内容适用于我使用Console2的情况。它使用Cygwin的bash shell和Cygwin$HOME目录中的.bash_profile

<path_to_cygwin>\bin\bash.exe --login -i -c "cd /cygdrive/c/Cygwin/home/<username>; exec /bin/bash --init-file .bash_profile
\bin\bash.exe--login-i-c“cd/cygdrive/c/Cygwin/home/;exec/bin/bash--init file.bash\u profile

只需在shell启动时将
.bash\u profile
替换为您想要的源文件(显然使用您自己的用户名和路径)。

使用console2作为带选项卡的包装器。下面是一个使用console2作为选项卡包装的方法。下面是一个

传递文件名似乎确实执行了该文件。但是,它似乎取消了shell的交互性质,因此在它完成脚本时存在。我希望使用该脚本作为会话的初始化。FWIW我目前正在使用“C:\Program Files(x86)\Git\bin\sh.exe--login-I~/gitProfile.sh”尝试“C:\Program Files(x86)\Git\bin\sh.exe--login-I--init file~/gitProfile.sh”,但这也会导致立即退出。英德