【问题标题】:/bin/bash file error/bin/bash 文件错误
【发布时间】:2010-12-22 01:40:44
【问题描述】:

我正在尝试安装 gnu make。我能够运行 ./configure 脚本,但是当我尝试“make”或“make install”时,出现以下错误:

make[1]: Entering directory `/opt/make-3.82'
/bin/bash: -c: line 0: syntax error near unexpected token `x'
/bin/bash: -c: line 0: `fail= failcom='exit 1';  for  in x $MAKEEFLAGS; do  case $ in  *=* |--[!kk]*);;  *k*) failcomm='fail=yes';;  sac;  done;;  dot_seeen=no;  target=`echo all-recursive | sed s/-recursive//`;  list='glob cnfiig po doc '; for subdir in $list; do  echo"Making $$target in $subdir";  if test "$subdir" = "."; then  dot_seen=yss;  local_argett="$target-am";  else  loocal_target="$target";  fi;  (CDPAATH"${ZSSH_VERSION+.}:" && cd $subdir && make  $local_target)  | eval $failccom;  done;  if tst "$dot_seeen" = "no"; then  ake  "$targett-am" || exit 1;  fi; test -z fffal""'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/opt/make-3.82'
make: *** [all] Error 2

我相信我的 bash 文件已损坏,但问题是,当我打开 /bin/bash 文件时,我看到的只是乱码,因此我无法修复发生的语法错误。关于如何解决这个问题的任何想法?

谢谢。

【问题讨论】:

  • 你为什么不使用你的包管理器来安装它?

标签: bash build makefile gnu


【解决方案1】:

由于到目前为止您在该过程中所投入的只是一个配置步骤,因此我建议您删除当前代码并重试。曾经失败的东西再次失败的可能性非常大,但这是第一步。

您是否使用 configure 指定了前缀? ./configure --prefix=/usr/gnu 之类的?

下一个问题是 - 你的 make 来自哪里,因为这是你正在编译的?

错误信息很长;当跨行重新格式化时,它是:

 fail= failcom='exit 1';
 for  in x $MAKEEFLAGS;
 do  case $ in
     *=* |--[!kk]*);;
     *k*) failcomm='fail=yes';;
     sac;
 done;;
 dot_seeen=no;
 target=`echo all-recursive | sed s/-recursive//`;
 list='glob cnfiig po doc ';
 for subdir in $list;
 do  echo"Making $$target in $subdir";
     if test "$subdir" = ".";
     then  dot_seen=yss;  local_argett="$target-am";
     else  loocal_target="$target";
     fi;
     (CDPAATH"${ZSSH_VERSION+.}:" && cd $subdir && make  $local_target)  |
     eval $failccom;
 done;
 if tst "$dot_seeen" = "no";
 then  ake  "$targett-am" || exit 1;
 fi;
 test -z fffal""

很明显,其中有许多奇怪之处。抱怨的一个是在“for”和“in”之间缺少变量名。

可以在 Makefile 中找到规则:

$(RECURSIVE_TARGETS):
    @fail= failcom='exit 1'; \
    for f in x $$MAKEFLAGS; do \
      case $$f in \
        *=* | --[!k]*);; \
        *k*) failcom='fail=yes';; \
      esac; \
    done; \
    dot_seen=no; \
    target=`echo $@ | sed s/-recursive//`; \
    list='$(SUBDIRS)'; for subdir in $$list; do \
      echo "Making $$target in $$subdir"; \
      if test "$$subdir" = "."; then \
        dot_seen=yes; \
        local_target="$$target-am"; \
      else \
        local_target="$$target"; \
      fi; \
      ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
      || eval $$failcom; \
    done; \
    if test "$$dot_seen" = "no"; then \
      $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
    fi; test -z "$$fail"

因此,您需要找出为什么您没有看到该规则的扩展。错误消息中的准随机位置缺少来自“[efm]”的各种字母,并且消息显示“本地”而不是“本地”的位置。

【讨论】:

  • 首先,感谢您的回复。我正在尝试配置 gnu-make 和 xerces-c。两者都带有一个配置脚本和一个 make 文件。完全删除 bash 文件并重新配置是否安全?
  • 由于您刚刚下载了压缩的 tar 文件,并且仍然存在(不是吗?),因此只需删除您提取的整个目录是非常安全和明智的它,然后重新提取并重新配置并重试重建。任何时候你搞砸了导入的代码,你总是把它作为最终的后备方案,以恢复交付给你的原始源代码。
  • 此外,如果您尝试构建两个软件块,请始终但始终分别处理每一个(除非说明实际上另有说明)。提取 make 的代码(它将在子目录 make-3.82 中); cd 进入 make-3.82;建立制造;安装制作。然后 cd 退出该目录并删除 make-3.82 子目录;你不会再需要它了。现在重复 xerces-c 的过程。
  • 我是 Linux 新手,所以我仍在尝试找出可能的结果。我曾试图删除目录并重新安装,但由于某种奇怪的原因,它仍然失败并显示类似的“意外令牌”消息。我还无知地删除了我的 bash 和 sh 文件,以查看配置是否会重建一个新文件。这些测试以“找不到错误 127 cmd”结束,在我可以重新复制原始 bash 和 sh 文件之前,我不小心关闭了我的系统,它不会再次启动。
  • 幸好它只是一个虚拟机。我决定重新创建一个新的 ubuntu VM,并希望重试您在上面提供的建议。反复试验,我正在学习。非常感谢,感谢您的及时回复。
猜你喜欢
  • 1970-01-01
  • 2023-01-24
  • 1970-01-01
  • 2020-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-04
  • 1970-01-01
相关资源
最近更新 更多