首页 > 解决方案 > 在 Windows 上的 Ubuntu 上执行产生输出的 shell 脚本失败

问题描述

我很难在 Windows 10 上的 Ubuntu 上的 bash 上执行我的 shell 脚本。脚本非常简单:

# file name: submission.sh
echo "Hello world" > output.txt

当我使用命令执行它时sh submission.sh,它给了我一个错误:

$ sh submission.sh
: Directory nonexistentssion.sh: cannot create output.txt

但是,当我将脚本更改为

# file name: submission.sh
echo "Hello world"

并用相同的命令执行它sh submission.sh,它给了我正确的输出

$ sh submission.sh
Hello world

当脚本涉及将输出定向到文件时,Windows 上的 Ubuntu 上的 bash 似乎无法正确处理。有什么解决方案或解决方法吗?

编辑: 关于我的系统的详细信息:

编辑: 直接在终端上键入命令有效,即

$ echo "Hello world" > output.txt
$ cat output.txt
Hello world

我还是想把命令放在一个文件上,然后执行文件,而不是直接把命令写到终端,这个还是没有解决。

标签: bashshwindows-subsystem-for-linux

解决方案


您似乎有损坏的文本nonexistentssion.sh:No such file or directorytput.txt这表明文件中可能有 Windows 行尾\r。如果您使用 Windows 程序(如记事本)创建脚本,那么可能就是这种情况。

如果你已经dos2unix在你的脚本上运行它,然后再试一次。

顺便提一下,running 和 runningsh不一样bash。在这种情况下,它不会有任何区别,但sh它是一个 POSIX shell,fullbash有很多扩展在sh.

一些平台sh作为符号链接运行,bash使人们误以为它们是相同的,但bash在运行时会检测到这一点并切换到 POSIX 模式sh。这是一个常见的问题。


推荐阅读