【问题标题】:How to change shells in script如何在脚本中更改 shell
【发布时间】:2011-04-18 09:17:31
【问题描述】:

系统默认的shell是csh,但是我想在bash写一个脚本。如何编写一个脚本来运行 bash,然后在最后转换回 csh。

我试过了,但它不起作用:

bash
var=Hello
echo $var
csh

【问题讨论】:

  • 使用 DOS .bat 文件,您可能需要担心切换回来(尽管我不确定该概念是否正确适用)。使用 Unix,您不必担心。

标签: bash shell csh


【解决方案1】:

您要查找的命令是exit。在键盘上键入时使用exit 而不是csh 以返回csh。当您输入csh 时,它刚刚在已经运行的 cshbash 会话之上启动了一个新的 csh 会话。

%bash
$ var=Hello
$ echo $var
Hello
$ exit
exit
%

正如其他人所说,使用脚本时:

#! /bin/bash
var=Hello
echo $var
exit # You don't need exit; but it's okay here.

【讨论】:

    【解决方案2】:

    您无需再次更换外壳。当脚本运行时,它将由一个子shell(在脚本结束时退出)运行,并且父shell不变。因此,正如已经建议的那样,您唯一需要做的就是确保脚本由正确的 shell 运行,而“shebang”就是这样做的方法:

    #!/bin/bash
    var=Hello
    echo $var
    

    仅此而已。

    【讨论】:

    • 我也试过了,但是如果我用 sudo 运行脚本,它会收回原来的 shell
    • @mohitsharma — 我不清楚你做了什么,出了什么问题。不过,您可能应该将其作为一个单独的问题提出。
    【解决方案3】:

    使用 sha bang 定义它

    #!/bin/bash
    

    在文件的开头。

    【讨论】:

    • 最后要转换回 csh,然后我会使用 #!/bin/csh ?
    • 不,在执行结束时,您的脚本将返回到默认 shell,在您的情况下为 csh。