调用多个Bash别名

use*_*932 1 linux bash terminal ubuntu .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'
Run Code Online (Sandbox Code Playgroud)

但这会在Music目录中打开三个终端,并且不会正确执行命令.我怎样才能使runcms彼此分开运行所有3个命令?

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

Cha*_*ffy 5

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

alias cmd1='cd ~/Desktop/ && gnome-terminal'
alias cmd2='cd ~/Documents/ && gnome-terminal'
alias cmd3='cd ~/Music/ && gnome-terminal'
alias runcmds='cmd1 & cmd2 & cmd3'
Run Code Online (Sandbox Code Playgroud)

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

cmd1() { cd ~/Desktop && gnome-terminal; }
cmd2() { cd ~/Documents && gnome-terminal; }
cmd3() { cd ~/Music && gnome-terminal; }
runcmds() { cmd1 & cmd2 & cmd3 & }
Run Code Online (Sandbox Code Playgroud)

没有涉及任何引用(最终&,与最终相反,通过确保像其他人一样,在子shell中运行;来阻止父shell的位置被更改为).当然,你可以只实现一个功能:~/Musiccmd3

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