我正在编写一个需要初始设置的脚本。 安装程序采用csh脚本的形式,在环境变量上有许多工件。 现在当我从bash中执行csh时,bash子shell中的变量保持不变。
示例:
#!/bin/bash
echo $PATH
setevnvar.csh -dir $ROOT_DIR/
echo $PATH
在这个例子中,我会看到在运行csh脚本之后更改了PATH变量(它是结果之一)
会感激任何想法。
答案 0 :(得分:1)
无法从任何子进程修改shell的变量。自从csh
启动bash
启动子进程后,无法完成任务。
您拥有的选项:
csh
脚本转换为bash
,并将source
转换为bash
脚本。bash
脚本转换为csh
,再将source
转换为其他脚本export
脚本中所需的变量标记为csh
,并从csh
脚本中启动bash脚本(这可能适用于您的特定内容,也可能不适用)需要),从而把事情弄清楚bash
或csh
)脚本"采购"完成了.
或(非POSIX)source
内置。例如:
#!/bin/bash
echo $PATH
. setevnvar.converted_to_bash -dir "$ROOT_DIR/"
echo $PATH
"采购"导致当前进程从其他文件读取命令并执行它们,就像它们是当前脚本的一部分一样,而不是启动新shell来执行其他文件。这就是变量赋值适用于此方法的原因。
请注意我在"$ROOT_DIR/"
扩展中添加了双引号,以保护包含特殊字符(如空格)的情况。