调用多个 Bash 别名

Calling multiple Bash aliases

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

这是我的.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 目录中打开三个终端并且无法正确执行命令。我怎样才能做到 运行cmds 运行 所有 3 个命令彼此分开?

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

您的操作顺序是倒退的:您需要 cd 启动终端之前,如果您想要这些终端中的新 shell受到 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 & }

不涉及任何引用(最终的 &,与最终的 ; 相对,防止父 shell 的位置被更改为 ~/Music确保 cmd3 和其他的一样,在子 shell 中运行)。当然,你可以只实现一个功能:

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

实际上 gnome-terminal 方便了 --working-directory 选项。

来自man gnome-terminal

--working-directory=DIRNAME
     Set the terminal's working directory to 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'