我不确定这里是否存在一个或两个问题:
文件/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
重定向输出stdout
,stderr
因此不需要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 添加(或从其他答案中添加任何内容)。