bash - Shell 脚本的行为因我 SSH 来自的 PC 而异
问题描述
我有一个 shell 脚本。
curl -s https://steamcharts.com/app/570940 | iconv -f windows-1251 | grep -Po -m 1 "(?<=>)[0-9]{1,4}(?=<\/span)"
*您对此有何改进?(我对 Unix 还很陌生)
该脚本位于我通过 SSH 访问的 RPI 上:
适用于 Linux (Ubuntu) 的 Windows 子系统
Termux
如果我从我的 PC 启动的 SSH 会话运行它,它会成功运行并返回一个数字。
但是,从我的手机运行它时,我收到以下错误:
iconv: illegal input sequence at position 81
为什么会这样?为什么我通过 SSH 连接的计算机会有所不同?
编辑:
< LANG=C.UTF-8
> LANG=en_US.UTF-8
< TERM=screen
> TERM=xterm-256color
以上是运行的结果:
diff lt.txt tm.txt | grep -P "(TERM|LANG)"
唯一的其他区别与 SSH 会话有关。
解决方案
您的iconv
命令用 指定输入编码-f
,但没有用 指定输出编码-t
。因此iconv
必须根据 LANG 的设置猜测输出编码。
添加-t
具有所需输出编码的选项,问题应该消失(我希望)。
虽然 LANG 在这两种情况下都指定了 UTF-8,但可能没有安装两种语言环境之一,因此导致iconv
.
推荐阅读
- docker - 如何登录 jfrog 容器注册表?
- python - 为什么 listfunction 不会遍历 url?
- ruby-on-rails - 如何使用“localhost”访问 dockerized rails 服务器
- reactjs - 反应:从数组中删除元素后显示删除的元素
- visual-studio-code - 我不断收到错误代码“无法写入程序用户数据”我什至无法打开程序 Visual Studio 代码
- r - readr::read_csv() 将第一列 X1 与行号相加
- javascript - 如何重构此查询以不包含这么多变量?
- android - 使用最新的 WindowInset API 出现软键盘时如何调整对话框布局
- react-native - 在反应原生图表工具包中在 barChart 中导入 Y 标签
- rust - 由两个闭包修改的变量