2017-04-13 92 views
0

我有一个问题应该很简单,但我无法在任何地方找到解决方案。从cshell执行bash shell(tcsh)

我想要做一些简单的设置和envvar在bash脚本中。 从bash终端运行脚本它工作正常,但从我正在使用的机器上默认的tcsh运行,我尝试导出变量时得到未知命令。

这是我非常简单的脚本。 my_tmp_script.sh

#!/bin/bash 

#clear 
echo $$ 

echo "setting environment variables" 
[email protected] 
export MY_TEMP_ENVVAR 
echo $MY_TEMP_ENVVAR 

,如果我这个来源,我得到

source my_tmp_script.sh 
8790 
setting environment variables 
[email protected]: Command not found. 
export: Command not found. 

,如果我改变的bash shell,它工作得很好。

我错过了什么?

感谢

+0

当您执行./my_tmp_script.sh或只有在您输入源代码时才会得到未知命令。执行应该可以工作,但是源代码不应该,因为它忽略了定义的shell。 – diidu

+0

只有当采购 – rasmus

+0

达里奥的答案下面告诉你的问题的原因和解决方案。 – diidu

回答

1

源脚本意味着当前shell进程执行脚本命令,而执行一个脚本时shell会产生一个新进程并等待它完成(除非在后台启动&)以获取退出状态($?)。

感兴趣的是修改当前不能执行脚本的shell设置。

使用tcsh shell找出bash脚本是无稽之谈,因为它们是不同的语言,而bash设置可能对tcsh shell没有用处。

错误显示的tcsh不能定义和出口环境变量

在bash

[email protected] 
export MY_TEMP_ENVVAR 

与tcsh的

setenv [email protected] 

另一个解决方案,如果可能的是改变默认壳或在登录时启动的bash ,shebang(!#/ bin/bash)在采购脚本文件时不起作用。

+0

我认为你的回答告诉我去寻求一个不同的解决方案。 – rasmus

+0

它更多地取决于问题中未提供的上下文 –

0

变量的语法是bash和tcsh中不同。

在TCS:

set var=val 

在bash:

var=val 

源只是用来加载在你的shell脚本shell脚本,所以预期的语法是主叫shell脚本的一个。

+0

我知道它们是不同的,我更喜欢bash。 即使我将脚本更改为tcsh,如果有人想要,我最终会遇到oppsitite问题从bash运行它:) – rasmus

1

当你source你的脚本,你有你的当前shell执行它,并且inital shebang被忽略。由于您的当前shell是tcsh,因此它需要tcsh语法。如果你想bash执行你的脚本,你应该让与像chmod a+x my_tmp_script.sh命令可执行文件,然后直接执行它:

./my_tmp_script.sh 

然后,最初的家当#!/bin/bash将得到尊重和正确的解释(bash)会调用。

+0

这个我已经试过了,执行的问题在于它是在一个脚本完成后被杀死的不同shell中完成的。并且变量未在当前shell中设置 – rasmus

+0

此时,为了让我们更好地了解您的问题是什么以及如何以最佳方式解决问题,您会给我们提供更充分的上下文。请尽可能具体,并说明你的问题,而不是你认为的解决方案。 – Dario

+0

@rasmus你还有兴趣吗?请在我上面的评论中问你,请告诉我们。 – Dario

0

需要改变你的文件中像波纹管

!/斌/庆典

明确

呼应$$

回声 “设置环境变量”

SETENV MY_TEMP_ENVVAR 123 @ tmp.com

echo $ MY_TEMP_ENV VAR