在新 shell 中批量运行多个命令

在新 shell 中批量运行多个命令

我正在尝试打开一个新的 Konsole 并在其上运行多个命令,基本上从我打开的终端 shell 中我需要:

  1. 打开一个新的终端 shell
  2. 设置位于特定文件夹中的环境
  3. gedit例如运行
  4. 运行另一个应用程序(可以是别名)

现在我尝试了这个选项:

konsole --noclose -e 'source /$MYTOOLS/env.csh | gedit | aliasApp'

但它给了我以下错误:

警告:找不到“source /$MYTOOLS/env.csh | gedit | aliasApp”,而是启动“/bin/tcsh”。请检查您的个人资料设置

答案1

konsole-e命令行选项指定在新建的终端仿真中运行的程序;通常,它将是一个 shell(例如/bin/bash/bin/tcsh),但它可以是任何控制台程序。它可以是任何可执行文件;它将运行,并将其 stdin、stdout 和 stderr 重定向到 konsole 创建的仿真终端。

它不可能是需要由 shell 解释的一行,因为那不是可执行文件的路径。

但是,您可以将参数传递给可执行文件。只需将它们添加到 konsole 调用的末尾即可。shell(包括您似乎正在使用的 tcsh 和 bash)允许您使用命令行选项指定要执行的单个命令-c。因此,您可以这样做:

konsole -e /bin/tcsh -c 'source /$MYTOOLS/env.csh && gedit && aliasApp'

(我不清楚为什么要启动一个gedit基于 GUI 的终端仿真器来运行。但也许这只是一个例子。)

请注意,一旦提供的命令行字符串完成,shell 就会终止,而当指定的可执行文件终止时,konsole 也会终止。因此,在执行这些命令后,它不会为您提供 shell。

如果要创建具有一组特定初始化过程的 shell,则需要使用特定于 shell 的机制来运行初始化脚本。例如,对于 bash,您可以使用命令行选项来--rcfile指定自定义启动脚本;不幸的是,tcsh 无法理解此选项,因此您需要执行其他操作(例如,在环境变量中传递文件名,如果设置了环境变量,则让常规启动脚本获取文件)。

相关内容