我是 Linux 新手,所以这可能应该是一个简单的修复,但我看不到它。
我从官方来源下载了一个脚本,用于为 fsharp 安装附加工具,但运行它时出现语法错误。
我尝试用 { 和 } 替换 ( 和 ),但最终它导致我出现另一个错误,所以我认为这不是问题,因为该脚本适用于所有人。我读过一些文章说我的 bash 版本可能不正确。
我正在使用 Ubuntu 10.10,出现以下错误:
install-bonus.sh:28:语法错误:“(”意外(预期“}”)
这是第 27、28 和 29 行:
{ 声明-a DIRS =(“$ {!3}”) 文件=$2
完整脚本如下:
/bin/sh -e #!/bin/sh -e 前缀=/usr BIN=$PREFIX/bin MAN=$PREFIX/共享/man/man1/ 死() { 回显“$1”>&2 echo “安装中止。” >&2 出口 1 } echo“此脚本将安装 F# 的附加材料,包括” echo“手册页、fsharpc 和 fsharpi 脚本以及 Gtk# 对 F# 的支持” echo“交互式(需要 root 访问权限)” 回显“” # ------------------------------------------------------------------------------------------ # 实用函数,在指定目录中搜索指定文件 # 如果找不到该文件,它会要求用户提供一个目录 结果="" 搜索路径() { 声明-a DIRS =(“$ {!3}”) 文件=$2 DIR=${DIRS[0]} 在 ${DIRS[@]} 中查找 TRYDIR 做 如果[-f $TRYDIR/$FILE] 然后 DIR=$TRYDIR 菲 完毕 而[!-f $ DIR / $ FILE] 做 echo "在 ${DIRS[@]} 中均未找到文件‘$FILE’。请输入 $1 安装目录:" 读目录 完毕 结果=$DIR } # ------------------------------------------------------------------------------------------ # 找到 F# 安装目录 - 这是必需的,因为我们想要 # 添加环境变量,生成“fsharpc”和“fsharpi”以及 # 将 load-gtk.fsx 复制到该目录 # ------------------------------------------------------------------------------------------ 路径=($1 /usr/lib/fsharp /usr/lib/shared/fsharp) searchpaths “F# 安装” FSharp.Core.dll PATHS[@] FSHARPDIR=$RESULT echo "成功找到 F# 安装目录。" # ------------------------------------------------------------------------------------------ # 检查我们是否拥有所需的一切 # ------------------------------------------------------------------------------------------ [ $(id -u) -eq 0 ] || die "请以 root 身份运行脚本。" which mono > /dev/null || die “在 PATH 中未找到 mono。” # ------------------------------------------------------------------------------------------ # 确保所有附加程序集都在 GAC 中 # ------------------------------------------------------------------------------------------ echo“将其他 F# 程序集安装到 GAC” gacutil -i $FSHARPDIR/FSharp.Build.dll gacutil -i $FSHARPDIR/FSharp.Compiler.dll gacutil -i $FSHARPDIR/FSharp.Compiler.Interactive.Settings.dll gacutil -i $FSHARPDIR/FSharp.Compiler.Server.Shared.dll # ------------------------------------------------------------------------------------------ # 安装附加文件 # ------------------------------------------------------------------------------------------ # 安装手册页 echo“安装其他 F# 命令、脚本和手册页” mkdir -p $MAN cp *.1 $MAN # 导出 FSHARP_COMPILER_BIN 环境变量 如果 [[ !"$OSTYPE" =~"darwin" ]]; 那么 回显“导出FSHARP_COMPILER_BIN = $ FSHARPDIR”> fsharp.sh mv fsharp.sh /etc/profile.d/ 菲 # 为 F# Interactive 生成“load-gtk.fsx”脚本(如果找不到二进制文件则询问用户) 路径=(/usr/lib/mono/gtk-sharp-2.0 /usr/lib/cli/gtk-sharp-2.0 /Library/Frameworks/Mono.framework/Versions/2.8/lib/mono/gtk-sharp-2.0) 搜索路径“Gtk#”gtk-sharp.dll PATHS[@] GTKDIR=$RESULT echo "成功找到 Gtk# 根目录。" 路径=(/usr/lib/mono/gtk-sharp-2.0 /usr/lib/cli/glib-sharp-2.0 /Library/Frameworks/Mono.framework/Versions/2.8/lib/mono/gtk-sharp-2.0) 搜索路径“Glib”glib-sharp.dll PATHS[@] GLIBDIR=$RESULT echo "成功找到 Glib# 根目录。" 路径=(/usr/lib/mono/gtk-sharp-2.0 /usr/lib/cli/atk-sharp-2.0 /Library/Frameworks/Mono.framework/Versions/2.8/lib/mono/gtk-sharp-2.0) 搜索路径“Atk#”atk-sharp.dll PATHS[@] ATKDIR=$RESULT echo "成功找到 Atk# 根目录。" 路径=(/usr/lib/mono/gtk-sharp-2.0 /usr/lib/cli/gdk-sharp-2.0 /Library/Frameworks/Mono.framework/Versions/2.8/lib/mono/gtk-sharp-2.0) 搜索路径“Gdk#”gdk-sharp.dll PATHS[@] GDKDIR=$RESULT echo “成功找到 Gdk# 根目录。” cp 奖励/load-gtk.fsx load-gtk1.fsx sed "s,INSERTGTKPATH,$GTKDIR,g" 加载-gtk1.fsx > 加载-gtk2.fsx sed "s,INSERTGDKPATH,$GDKDIR,g" 加载-gtk2.fsx > 加载-gtk3.fsx sed "s,INSERTATKPATH,$ATKDIR,g" 加载-gtk3.fsx > 加载-gtk4.fsx sed "s,INSERTGLIBPATH,$GLIBDIR,g" 加载-gtk4.fsx > 加载-gtk.fsx rm 加载-gtk1.fsx rm 加载-gtk2.fsx rm 加载-gtk3.fsx rm 加载-gtk4.fsx mv 加载-gtk.fsx $FSHARPDIR/加载-gtk.fsx # 生成“fsharpc”和“fsharpi”脚本(使用 F# 路径) #'fsharpi' 自动搜索 F# 根目录(例如 load-gtk) 回显“#!/bin/sh”> fsharpc 回显“exec mono $FSHARPDIR/fsc.exe --resident \”\$@\””>> fsharpc chmod 755 fsharpc 回显“#!/bin/sh”> fsharpi 回显“exec mono $FSHARPDIR/fsi.exe -I:\”$FSHARPDIR\“\”\$@\“”>> fsharpi chmod 755 fsharpi mv fsharpc $BIN/fsharpc mv fsharpi $BIN/fsharpi
多谢!
答案1
将第一行从
#! /bin/sh -e
到
#!/bin/bash -e