首页 > 解决方案 > 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 上:

  1. 适用于 Linux (Ubuntu) 的 Windows 子系统

  2. 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 会话有关。

标签: bashssh

解决方案


您的iconv命令用 指定输入编码-f,但没有用 指定输出编码-t。因此iconv必须根据 LANG 的设置猜测输出编码。

添加-t具有所需输出编码的选项,问题应该消失(我希望)。

虽然 LANG 在这两种情况下都指定了 UTF-8,但可能没有安装两种语言环境之一,因此导致iconv.


推荐阅读