【问题标题】:How to change shell in script temporary in sunOS?如何在 sunOS 中临时更改脚本中的 shell?
【发布时间】:2011-04-26 10:37:19
【问题描述】:

这台机器有默认的shell“sh”并运行SunOS。我尝试像这样运行脚本:

#!/bin/bash
export NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P9
echo $NLS_LANG

我得到了输出:

NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P9^M:不是标识符

我认为脚本无法执行此命令,但不明白为什么。也许是因为默认的 shell 不是 bash shell。

您能帮我在脚本中将 sh shell 转换为 bash shell。

P.S: 我也试过 #!/bin/sh 但结果是一样的

【问题讨论】:

    标签: bash scripting sunos


    【解决方案1】:

    您的脚本使用了错误的行尾。通过dos2unix 运行它。

    【讨论】:

    • 现在我得到输出:NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P9: is not an identifier
    • 你是如何执行脚本的?
    【解决方案2】:

    你确定 Bash 就是你所说的那样吗?考虑使用以下 shebang:

    bash-3.2$ cat ./test.sh
    #!/usr/bin/env bash
    export NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P9
    echo $NLS_LANG
    

    确保您的 shell 脚本是可执行的:

    bash-3.2$ chmod +x ./test.sh
    bash-3.2$ ls -l ./test.sh
    -rwxr-xr-x  1 paj  staff  81 26 Apr 11:52 ./test.sh
    

    然后运行...

    bash-3.2$ ./test.sh
    AMERICAN_AMERICA.WE8ISO8859P9
    

    【讨论】:

    • 谢谢 Johnsyweb 我发现了我的错误。我试图用#sh test.sh 运行,这样它就不起作用了。我尝试使用 #./test.sh 并且它有效。谢谢大家...
    • 乐于助人。您不需要在 ./test.sh 之前输入任何内容。