我是 Linux 的新手,所以这可能应该是一个简单的修复,但我看不到它。
我有一个从官方来源下载的脚本,用于为 fsharp 安装其他工具,但在运行它时它给了我一个语法错误。
我试图用 { 和 } 替换 ( 和 ) 但最终它导致我出现另一个错误,所以我认为这不是问题,因为该脚本适用于所有人。我读过一些文章说我的 bash 版本可能不是正确的。
我正在使用 Ubuntu 10.10,这是错误:
install-bonus.sh:28:语法错误:“(”意外(预期“}”)
这是第 27、28 和 29 行:
{ 声明 -a DIRS=("${!3}") 文件=$2
和完整的脚本:
#!/bin/sh -e 前缀=/usr BIN=$PREFIX/bin MAN=$PREFIX/share/man/man1/ 死() { 回声“$1”>&2 echo "安装中止。" >&2 1号出口 } echo "此脚本将为 F# 安装其他材料,包括" echo "手册页、fsharpc 和 fsharpi 脚本以及 Gtk# 对 F# 的支持" 回声“交互式(需要root访问权限)” 回声“” #------------------------------------------------ ----------------------------------------- # 在指定目录中搜索指定文件的实用函数 # 如果找不到文件,它会要求用户提供目录 结果="" 搜索路径() { 声明 -a DIRS=("${!3}") 文件=$2 目录=${DIRS[0]} ${DIRS[@]} 中的 TRYDIR 做 如果 [ -f $TRYDIR/$FILE ] 然后 目录=$TRYDIR 菲 完毕 尽管 [ !-f $DIR/$文件] 做 echo "${DIRS[@]} 中没有找到文件 '$FILE'。请输入 $1 安装目录:" 读取目录 完毕 结果=$目录 } #------------------------------------------------ ----------------------------------------- # 定位 F# 安装目录 - 这是必需的,因为我们想要 # 添加环境变量,生成 'fsharpc' 和 'fsharpi' 以及 # 将 load-gtk.fsx 复制到该目录 #------------------------------------------------ ----------------------------------------- PATHS=( $1 /usr/lib/fsharp /usr/lib/shared/fsharp ) searchpaths "F# 安装" FSharp.Core.dll PATHS[@] FSHARPDIR=$结果 echo "成功找到 F# 安装目录。" #------------------------------------------------ ----------------------------------------- # 检查我们是否拥有所需的一切 #------------------------------------------------ ----------------------------------------- [ $(id -u) -eq 0 ] || die "请以 root 身份运行脚本。" 哪个单声道 > /dev/null || 死“在 PATH 中找不到单声道。” #------------------------------------------------ ----------------------------------------- # 确保所有其他程序集都在 GAC 中 #------------------------------------------------ ----------------------------------------- echo "向 GAC 安装额外的 F# 程序集" 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”脚本(询问用户是否找不到二进制文件) PATHS=( /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=$结果 echo "成功找到 Gtk# 根目录。" PATHS=( /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# 根目录。" PATHS=( /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=$ 结果 echo "成功找到 Atk# 根目录。" PATHS=( /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=$结果 echo "成功找到 Gdk# 根目录。" cp 奖金/加载-gtk.fsx 加载-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 load-gtk.fsx $FSHARPDIR/load-gtk.fsx # 生成 'fsharpc' 和 'fsharpi' 脚本(使用 F# 路径) # 'fsharpi' 自动搜索 F# 根目录(例如 load-gtk) echo "#!/bin/sh" > fsharpc echo "exec mono $FSHARPDIR/fsc.exe --驻留\"\$@\"" >> fsharpc chmod 755 fsharp 回声“#!/bin/sh”> fsharpi echo "执行单声道 $FSHARPDIR/fsi.exe -I:\"$FSHARPDIR\" \"\$@\"" >> fsharpi chmod 755 fsharpi mv fsharpc $BIN/fsharpc mv fsharpi $BIN/fsharpi
非常感谢!