错误“排序:无法读取:+1:没有这样的文件或目录”

错误“排序:无法读取:+1:没有这样的文件或目录”

因此,我正在开发一个 UNIX 课程的项目,我们正在一步一步地遵循书中的说明。我最近遇到一个问题,我们在 shell 脚本中创建多个函数,但我无法让它正常运行,即使我的代码与它所说的相同。

一些背景: - 源目录存在 - 该目录中存在文件 corp_phones - 我在尝试使用该函数之前已加载该函数

这是我的脚本:

sort_name()
 {
   sort +1 -t: ~/source/corp_phones
 }
sort_date()
 {
   sort +6 -t: ~/source/corp_phones
 }
sort_dept()
 {
   sort +4 -t: ~/source/corp_phones
 }

答案1

简而言之,您用于排序的语法来自旧版本的 POSIX。来自coreutils 排序手册:

在不符合 POSIX 1003.1-2001 的系统上,排序支持传统的原点零语法“+pos1 [-pos2]”来指定排序键。如果 y 为“0”或不存在,传统命令“sort +ax -b.y”相当于“sort -k a+1.x+1,b”,否则相当于“sort -k a+1.x” +1,b+1.y'。

这种传统行为可以使用 _POSIX2_VERSION 环境变量进行控制(请参阅标准一致性);当未使用带有“-pos2”的传统语法设置 POSIXLY_CORRECT 时,也可以启用它。

用于标准主机的脚本应避免传统语法并应使用 -k 代替。

虽然可以恢复传统行为,但使用更新的语法更加简单。

+1选项定义从第二个字段到行尾的排序键。等效的新选项是-k 2.因此,您应该使用的新sort命令分别是:

sort -k 2 -t: ~/source/corp_phones
sort -k 7 -t: ~/source/corp_phones
sort -k 5 -t: ~/source/corp_phones

相关内容