2017-04-13 144 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