运行脚本时出现脚本替换问题

运行脚本时出现脚本替换问题

我是 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

相关内容