bash - 在 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 似乎无法正确处理。有什么解决方案或解决方法吗?
编辑: 关于我的系统的详细信息:
- 程序:“Windows 上的 Ubuntu 上的 Bash”
- 操作系统:Windows 10 版本 1709
编辑: 直接在终端上键入命令有效,即
$ echo "Hello world" > output.txt
$ cat output.txt
Hello world
我还是想把命令放在一个文件上,然后执行文件,而不是直接把命令写到终端,这个还是没有解决。
解决方案
您似乎有损坏的文本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
。这是一个常见的问题。
推荐阅读
- javascript - 在javascript中编辑表格内的标签
- sql - 分组后无法提取最高销售额
- flutter - Flutter 压缩相机图像
- python - matlibplot - TextBox:如何获取输入并继续程序?
- python - 我得到 ValueError: X has 5851 features per sample; 将线性 SVC 模型应用于测试集时期望 2754
- sql - 具有相同过滤器的 PostgreSQL 多重聚合
- woocommerce - 显示行数而不是购物车总数 woocommerce
- android - 如何使用搜索视图过滤回收站视图
- node.js - TypeError:无法在 NodeJs(fastify)部署中将 undefined 或 null 转换为对象
- google-apps-script - 用于链接到谷歌应用程序脚本中的其他 html 文件时链接断开