运行{通过 bash 脚本的命令 vs} + 重定向输出

运行{通过 bash 脚本的命令 vs} + 重定向输出

我不确定这里是否存在一个或两个问题:

文件/usr/bin/line1

wine /home/aiao/.wine/drive_c/Program\ Files\ \(x86\)/LINE/Line.exe > /dev/null 2>&1

文件/usr/bin/line2

!#/usr/bin/bash
wine /home/aiao/.wine/drive_c/Program\ Files\ \(x86\)/LINE/Line.exe > /dev/null 2>&1

wine 命令本身运行良好,但是当我运行的时候/usr/bin/line1,我得到:

: ambiguous redirect1: 1

当我运行时/usr/bin/line2,我得到:

wine: bad interpreter: No such file or directory

我如何通过 bash 脚本运行命令?这里发生了什么?

答案1

首先,你需要一个有效的shebang。你的第二个文件几乎有一个,但!#方向错误。其次,您需要一个有效的解释器!我的系统都没有/usr/bin/bash,只有/bin/bash。您甚至可以只使用/bin/sh。它稍微轻量一些。

以下应该有效:

#!/bin/sh
wine /home/aiao/.wine/drive_c/Program\ Files\ \(x86\)/LINE/Line.exe > /dev/null 2>&1

答案2

> /dev/null在第一个文件中,您可以使用或&> /dev/null重定向输出stdoutstderr因此不需要2>&1

在第二个文件中,我相信正确的解释器是#!/bin/bash

答案3

文件句柄 1 和 2 (stdout & stderr) 可能会被 wine 关闭,因为它不使用它们,甚至可能在建立键盘处理程序后释放 0 (stdin)。此外,这对 windows 来说更公平,因为所有文件句柄都可用,就像它在新的程序实例中期望的那样。

答案4

首先:您正在使用Wine,在这种情况下可能需要重新创建模仿 Windows 命令 shell (cmd.exe) 的运行时环境的东西。

由于您没有说出drive_c/Program\ Files\ \(x86\)/LINE/Line.exe是什么,因此无法说出它的要求。

现在: ambiguous redirect1: 1看起来像是 Wine 或 cmd.exe 的可能输出。

您可能需要确保只有 WINE 受到 Linux 样式重定向的影响。您可能需要研究 Wine 的期望,以及如何保护/分离其参数与 bash 捕获的参数,反之亦然。

可以尝试的事情:
由于它可以从 bash 命令提示符下工作,因此请尝试source line2启动器。

如果可行,也许可以尝试这样的变体 - 从脚本中:

bash <<EOF
wine /home/aiao/.wine/drive_c/Program\ Files\ (x86)/LINE/Line.exe > /dev/null 2>&1
末梢血

还有另一个...
start是 Windows 命令行工具,其执行的任务与双击链接或文件相同,因此请尝试:

wine 启动 /home/aiao/.wine/drive_c/Program\ Files\ \(x86\)/LINE/Line.exe 

注意:如果没有重定向,如果它可以真正运行程序,那么 - 如果您仍然需要它,您可以尝试>/dev/null 2>&1为 Wine 添加(或从其他答案中添加任何内容)。

相关内容