我正在尝试打开一个新的 Konsole 并在其上运行多个命令,基本上从我打开的终端 shell 中我需要:
- 打开一个新的终端 shell
- 设置位于特定文件夹中的环境
gedit
例如运行- 运行另一个应用程序(可以是别名)
现在我尝试了这个选项:
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 无法理解此选项,因此您需要执行其他操作(例如,在环境变量中传递文件名,如果设置了环境变量,则让常规启动脚本获取文件)。