制作优雅的 bash 脚本

Posted

技术标签:

【中文标题】制作优雅的 bash 脚本【英文标题】:Making an elegant bash script 【发布时间】:2018-05-01 10:30:44 【问题描述】:

我有一个 Windows 应用程序,我在我的 Mac 上使用 WineHQ 来运行这个应用程序。该应用程序是物理的特定数值求解器。每次要解决物理问题时,都要给出一定的初始条件。

我们的想法是开发一个 bash 脚本,它可以安装或运行这个数值求解器以用于初始条件。

安装: 开发此应用程序时,开发人员忘记将某些文件嵌入到应用程序中。因此,该应用程序需要某些自定义文件,一旦安装应用程序,这些文件将被复制粘贴。 [它不是裂缝]。

运行: 现在安装了应用程序,每次我运行求解器时,我都必须指定一个初始条件。初始条件位于 INIT_FOLDER 中。我打算把这个文件夹复制到/APP,然后运行APP.exe。

我正在为此编写一个 bash 脚本。

#! /bin/bash
if [ $1 = "INSTALL" ]; then
    wine [APP MAC PATH] APP.exe
    cp [CUSTOM FILES PATH]/ ~/.wine.../APP
    cd ~/.wine.../APP
else 
    if [ $1="RUN" ];  then
        cp $2 ~/.wine.../APP
        cd ~/.wine.../APP
        wine APP.exe
    fi
fi

最终目标是运行以下命令,

>>./scriptname INSTALL
>>./scriptname RUN INIT_FOLDER_PATH

安装: 当然,当我运行命令安装应用程序时,我不会遇到任何问题。但是,我想改进以下脚本(以教育自己)。假设应用程序没有安装 I.E.

wine [APP MAC PATH] APP.exe 

“失败”。如何防止后续操作被执行?

另外,我不想输入 wine 文件夹的位置。他们是否有某种方法可以让这更容易,比如将“wine app path”表示为等价词(比如 FOO)

运行: 我想对此进行一些验证。如果我输入,

>>./scriptname RUN INIT_FOLDER_PATH/

我是不是假设 $2 是 INIT_FOLDER_PATH。也是下面命令的写法,

cp $2 ~/.wine.../APPFOLDERNAME

【问题讨论】:

这可能应该分成多个不同的问题。例如,如果wine foo.exe || exitif ! wine foo.exe; then exit; fifoo.exe 失败时没有退出,那么这就是一个单独的、独立讨论的主题(这并不是关于“优雅”的真正问题)。 另外,这里有 shellcheck.net 会自动捕获的错误。 你可以像这样设置默认参数...***.com/a/33419280/2836621 您可以考虑安装 Oracle Virtualbox(免费)并使用您的求解器在其中运行适当的 Windows 副本。您可以与 Windows 共享 Mac 上的一个或多个目录和/或在 macOS 和 Windows 之间拖放、复制和粘贴。最重要的是,整个 Windows 的东西都在 Mac 上的一个文件中,因此您可以通过删除来摆脱整个垃圾堆(包括所有的服务包、错误、病毒、无用的回形针助手和无用的 BATCH 脚本语言)一个文件! 【参考方案1】:

    为了避免指定您的 wine 可执行文件的路径,请确保该路径位于您计算机的 PATH 环境变量中。 See here 如何在 Mac 上做到这一点。完成后,您只需指定程序名称即可运行它。

    我不确定错误捕获。您将在 wineHQ 环境中运行 Windows 可执行文件,因此您有两层错误。 1) windows 可执行文件和 2) Wine 中的错误。您可以查看 wine 用户指南中关于 environment variables 的部分。特别是 WineDebug 通道选项。我不确定这是否能解决 Windows 可执行文件中的错误,但这似乎是一个不错的起点。您还可以在运行wine 行后通过检查返回码return=$? 来检查返回码,这将是一个代码0-255。 0 是 A-OK,其他任何事情都是“最后一个命令发生了一些不好的事情”。

我不完全确定您在问题的最后部分要问什么。在您的情况下,$2 将引用字符串“INIT_FOLDER_PATH/”,因此您的cp $2 ... 行会将名为“INIT_FOLDER_PATH/”的文件夹中的任何内容复制到您的~/.wine... 路径。

【讨论】:

以上是关于制作优雅的 bash 脚本的主要内容,如果未能解决你的问题,请参考以下文章

制作LINUX安装DEB,脚本中的函数报错怎么办?

如何从 bash 脚本中停用 virtualenv

从脚本创建 bash 文件 [重复]

shell制作自解压文件tar

shell制作自解压文件tar

shell制作自解压文件tar