调用多个Bash别名

时间:2017-05-10 00:15:02

标签: linux bash ubuntu terminal .bash-profile

我想使用一个命令在终端的三个新终端上打开三个不同的文件夹。所有这些都应该彼此独立运行,这意味着一个命令不依赖于它之前的命令。

这是我的.bash_aliases,从.bashrc

调用
alias cmd1=gnome-terminal && cd ~/Desktop/

alias cmd2=gnome-terminal && cd ~/Documents/

alias cmd3=gnome-terminal && cd ~/Music/

alias runcmds='cmd1 & cmd2 & cmd3'

但这会打开Music目录中的三个终端,并且无法正确执行命令。我如何才能使runcms彼此分开运行所有3个命令?

另外,我什么时候需要使用引号,什么时候不需要?

2 个答案:

答案 0 :(得分:5)

您的操作顺序是向后的:如果您希望这些终端中的新shell受cd的影响,您需要cd 才能启动终端 。此外,您需要引用,以确保两个命令 - cdgnome-terminal的调用 - 被视为别名的一部分。

alias cmd1='cd ~/Desktop/ && gnome-terminal'
alias cmd2='cd ~/Documents/ && gnome-terminal'
alias cmd3='cd ~/Music/ && gnome-terminal'
alias runcmds='cmd1 & cmd2 & cmd3'

顺便说一下,我强烈建议 - 根本不使用别名,而是定义函数:

cmd1() { cd ~/Desktop && gnome-terminal; }
cmd2() { cd ~/Documents && gnome-terminal; }
cmd3() { cd ~/Music && gnome-terminal; }
runcmds() { cmd1 & cmd2 & cmd3 & }

不涉及任何引用(最终&,而不是最终;,通过确保~/Music,阻止父shell的位置更改为cmd3,像其他人一样,在子shell中运行)。当然,您可以实现一个功能:

runcmds() {
  local dir
  for dir in ~/Desktop ~/Documents ~/Music; do
    (cd "$dir" && exec gnome-terminal) &
  done
}

答案 1 :(得分:3)

实际上gnome-terminal有助于--working-directory选项。

来自man gnome-terminal

  

- 工作目录= DIRNAME
  将终端的工作目录设置为DIRNAME。

您可以按如下方式使用别名:

alias cmd1='gnome-terminal --working-directory="$HOME/Desktop"'
alias cmd2='gnome-terminal --working-directory="$HOME/Documents"'
alias cmd3='gnome-terminal --working-directory="$HOME/Music"'
alias runcmds='cmd1 & cmd2 & cmd3'