【问题标题】:commands work in linux terminal but not in shell script命令在 linux 终端中有效,但在 shell 脚本中无效
【发布时间】:2012-09-09 08:00:32
【问题描述】:

我正在尝试使用以下命令运行以下 shell 脚本:

$ bash linuxScript.sh

这就是我的脚本的样子

#!/bin/bash
svnroot=.../resources
FINDBUGS_HOME="~/opt/findbugs-2.0.1"
svn help
svn export --force ".../resources/GUI.jar"

opt=$1 
case $opt in
     -normal)
    echo "normal mode"
    java -jar %FINDBUGS_HOME%\lib\findbugs.jar -textui -onlyAnalyze common.-,ufm.- -output UFMGUI_Normal.html -html GUI.jar;;
    ...
esac

现在由于某种原因,命令 svn help 和 svn export 不能正常工作(我调用 svn help 只是为了强调我的观点)。

他们给出了以下错误:

'unknown command: 'help
Type 'svn help' for usage.
' is not properly URI-encodedaire.com/repos/ufm_ui/branches/UFM_3_7/tools/build/resources/GUI.jar

如果我已经问过它,它也会对非 svn 相关的命令大喊:

:command not founde 7:
'inuxScript.sh: line 8: syntax error near unexpected token 'in
'inuxScript.sh: line 8: 'case $opt in

现在奇怪的是,如果我在终端中输入 svn 命令,一切正常!我试图用谷歌搜索解决方案,我也搜索了这个论坛,但我找不到任何有用的东西。

非常感谢您的帮助。谢谢!

【问题讨论】:

  • 你的第一个位置参数设置了吗?否则$opt 将为空
  • 尝试通过将#!/bin/bash -vx 作为第一行来调试您的脚本。
  • 在第一行之后添加set -x,看看实际运行的是什么。你有一些报价问题。
  • %FINDBUGS_HOME%\lib\findbugs.jar?它在 *nix 世界中有意义吗?只是想知道。
  • 另外,检查你的脚本是否有 Windows 式的行尾和 BOM 标记。

标签: linux bash svn shell


【解决方案1】:
  1. 以下命令的输出是什么?:

    $ which bash
    

    这是否如您预期的那样显示“/bin/bash”?

  2. 以下 shell 脚本(假设 /tmp/x.sh)的输出是什么?:

    $ cat /tmp/x.sh
    #!/bin/bash
    svn help
    
    $ bash /tmp/x.sh
    

    应该是“svn help”输出。

  3. FINDBUGS_HOME 看起来是环境变量,它看起来被错误地引用了 以下行:

    java -jar %FINDBUGS_HOME%\lib\findbugs.jar ...
    

    %FINDBUGS_HOME% 是正确的符号吗? (它看起来像 DOS 符号......) 如果它意味着 shell env-var,不是吗? $FINDBUGS_HOME ?

注意:上面的 $ 只是与您的帖子相同的 bash 提示符。

【讨论】:

  • 不应该是$FINDBUGS_HOME吗?
【解决方案2】:

看起来你的脚本是以 DOS 格式保存的,尝试用 vim 打开并用

查看文件格式
:set ff

我猜它会给你“dos”

要将其转换为 unix 格式,请使用

:set ff=unix
:w

【讨论】:

  • 我有同样的问题,尝试这样做。没有什么不同。
猜你喜欢
  • 1970-01-01
  • 2021-09-25
  • 2012-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-27
相关资源
最近更新 更多