【问题标题】:Creating files in a *nix environment with an email address as its name在 *nix 环境中创建以电子邮件地址为名称的文件
【发布时间】:2010-07-22 08:55:59
【问题描述】:

请不要告诉我为什么你认为这是一个坏主意。请告诉我这是否可行。

我想在一个文件夹中创建文件,名称如下:

asdf@qwerty.com.eml
abc+def@asdf.net.eml
abc_def@sasdf.at.eml

电子邮件地址中允许的字符与 unix 系统允许的字符是否存在一些根本的不兼容?

我将有一个 bash 脚本读取文件名,减去“.eml”结尾,将其转换为“正确”的可用格式并向地址发送电子邮件。

一个简单的测试表明它把上面的内容保存为文件调用

asdf\@qwerty.com.eml
abc+def\@asdf.net.eml
abc_def\@sasdf.at.eml

【问题讨论】:

  • 您的测试似乎有缺陷...您是如何测试的?
  • 嗯...我所做的只是“编辑 asdf@qwerty.com.eml”,它打开了一个名为“GNU nano 1.3.12”的编辑器。正如我提到的那样,那个程序保存了它......
  • btw - 我试过“touch ...”,这也创建了与上面相同的命名文件...看起来这是我的共享托管服务器上的默认约定...
  • 您在尝试touch 命令时使用的是什么shell?你做了类似touch asdf@qwerty.com的事情?
  • echo $SHELL 显示 /usr/local/cpanel/bin/jailshell ps 显示 bash

标签: bash email unix shell email-validation


【解决方案1】:

*nix 文件名中唯一不允许使用的字符是\0/,无论如何都不允许在电子邮件地址中使用这两个字符。你的 shell 如何处理符号是另一回事。

【讨论】:

    【解决方案2】:

    除了/(目录分隔符)和ASCII 0(字符串终止符)之外,UNIX文件名中不允许有no字符,所以基本没有问题。

    处理 shell 脚本中的那些文件名是另一回事;它至少需要将每个变量引用引用为“$FILENAME”,即使忘记一个quotatino 也会产生一个非常罕见的、阴险的错误。 (此外,除非您始终使用 -0 选项,否则许多其他实用程序将无法处理奇怪的字符,例如 | 或换行符。)

    所以是的,技术上你的坏主意是可行的:-)

    【讨论】:

    • 必须始终引用 shell 脚本中的变量以防止出现严重错误。假定文件名不包含空格、换行符等的 Shell 脚本被设计破坏了。
    • '当然他们坏了。但关键是它们以极其隐蔽和隐蔽的方式被破坏,因为你可能会错过错误,直到出现真正的奇怪角色。 那个,再加上偶尔忘记引号的可能性很大,这就是这个想法如此糟糕的原因。
    • 我知道\n 有什么问题——UNIX 中的大多数实用程序都是面向行的(无论如何电子邮件中都不允许使用\n)。但是| 可能有什么问题?
    【解决方案3】:

    简答:

    przemek@linux-634b:~/tmp/email> touch john.smith@example.com
    przemek@linux-634b:~/tmp/email> ls
    john.smith@example.com
    

    完美运行;)

    长答案:

    这取决于您使用的文件系统。请参阅Wikipedia entry,其中列出了文件名中允许的字符。大多数 UNIX 文件系统支持电子邮件地址中可以包含的所有字符。但是,非 UNIX 文件系统(例如 FAT)可能会导致问题。

    请注意,您的问题可能来自不正确的转义。检查您是如何创建文件的。

    【讨论】:

      【解决方案4】:

      你的“简单测试”是什么?

      键入 abc 并点击制表符? bash 自动完成将在每个特殊字符之前添加一个 \。 但这并不意味着,它的存储名称中带有 \。

      使用 ls 查看真名。

      【讨论】:

        【解决方案5】:

        在将文件名视为 blob 并允许所有字节序列的系统(即 Linux)上,此类文件名没有问题。但它们不能移植到将文件名视为 Unicode 字符串并不允许某些字符(Windows)或转换文件名(Mac OS X,规范分解)的系统。

        【讨论】:

          猜你喜欢
          • 2017-11-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-07-14
          • 1970-01-01
          • 1970-01-01
          • 2020-06-03
          • 1970-01-01
          相关资源
          最近更新 更多