从bash脚本运行csh脚本

时间:2017-01-25 12:34:47

标签: bash csh

我正在编写一个需要初始设置的脚本。 安装程序采用csh脚本的形式,在环境变量上有许多工件。 现在当我从bash中执行csh时,bash子shell中的变量保持不变。

示例:

#!/bin/bash 
echo $PATH
setevnvar.csh -dir $ROOT_DIR/
echo $PATH

在这个例子中,我会看到在运行csh脚本之后更改了PATH变量(它是结果之一)

会感激任何想法。

1 个答案:

答案 0 :(得分:1)

无法从任何子进程修改shell的变量。自从csh启动bash启动子进程后,无法完成任务。

您拥有的选项:

  • 将您的csh脚本转换为bash,并将source转换为bash脚本。
  • 将您的bash脚本转换为csh,再将source转换为其他脚本
  • 确保export脚本中所需的变量标记为csh,并从csh脚本中启动bash脚本(这可能适用于您的特定内容,也可能不适用)需要),从而把事情弄清楚
  • 将两个脚本中的代码合并为一个(bashcsh)脚本

"采购"完成了.或(非POSIX)source内置。例如:

#!/bin/bash 
echo $PATH
. setevnvar.converted_to_bash -dir "$ROOT_DIR/"
echo $PATH

"采购"导致当前进程从其他文件读取命令并执行它们,就像它们是当前脚本的一部分一样,而不是启动新shell来执行其他文件。这就是变量赋值适用于此方法的原因。

请注意我在"$ROOT_DIR/"扩展中添加了双引号,以保护包含特殊字符(如空格)的情况。