在 2013-01-10 Glenn Fowler 将此发布到ast-users 邮件列表:
正如在 AST 和 UWIN 列表中多次指出的那样,AT&T 对 OpenSouce 软件的支持很少,这就是为什么我们很少有人参与我们相当大的 AST 软件集合。尽管如此
ksh,nmake、vczip、UWIN和其他 AST 工具仍在几个 AT&T 项目中继续使用。事实证明,软件并不是唯一缺乏支持的东西:dgk (David Korn)(AT&T 研究员,服务 36 年)和 gsf (Glenn Fowler)(AT&T 研究员,服务 29 年)都已终止,10 月生效10. 我们的第三个主要合作伙伴 Phong Vo(AT&T 研究员,服务 32 年)几个月前离开了 Google。UWIN 维护者 Jeff Fellin 仍在 AT&T 工作,并为一些关键操作提供 UWIN 支持。
dgk 和 gsf 都将继续在 AST 软件上工作,并且实际上可能有更多的时间(至少在短期内)专注于它。
下载站点和邮件组将至少在接下来的几个月内保留在 AT&T 中。我们的 AT&T 同事 dr.ek,AST 用户和错误检测器,将维护该站点。我们已经保护了 astopen.org 域,并且正在研究非 AT&T 托管选项,包括带有错误跟踪功能的存储库。
改变的过程需要时间;用户社区的耐心将不胜感激。在一个基本上稳定了近 30 年的环境中工作后,有 …
在 unix/linux 中,路径中任意数量的连续正斜杠通常等效于单个正斜杠。例如。
$ cd /home/shum
$ pwd
/home/shum
$ cd /home//shum
$ pwd
/home/shum
$ cd /home///shum
$ pwd
/home/shum
Run Code Online (Sandbox Code Playgroud)
然而由于某种原因,绝对路径开头的两个正斜杠被特殊对待。例如。
$ cd ////home
$ pwd
/home
$ cd ///
$ pwd
/
$ cd //
$ pwd
//
$ cd home//shum
$ pwd
//home/shum
Run Code Online (Sandbox Code Playgroud)
补丁中任何其他地方的任何其他数量的连续正斜杠都会被截断,但开头的两个将保留,即使您随后在相对于它的文件系统中导航。
为什么是这样?/... 和 //... 之间有什么区别吗?
我如何(递归地)检测目录中以绝对方式而不是相对方式标识其目标的所有符号链接?
由于在移动整个目录树时这些链接很可能会中断,因此我希望有一种识别它们的方法。
如果移动目录树(如果它们碰巧指向目录树的根目录之外),即使是相对链接也可能会中断,但我认为这个问题已解决。
在符合 POSIX 标准的系统中,是否出现(可能重叠)/./已被替换的路径/保证通向与原始路径相同的目标?
例子:
#!/bin/bash
shopt -s extglob
some_command -- "${@//\/+(.\/)//}"
Run Code Online (Sandbox Code Playgroud)
鉴于评论,它不等同,所以我将更新问题:
在符合 POSIX 标准的系统中,是否出现的路径(可能重叠)/././已被替换为/./保证导致与原始路径相同的目标?
我正在使用这样的命令查询服务器:
find ./ -type f -name 'filename"
Run Code Online (Sandbox Code Playgroud)
我有很多文件开头
.//library
Run Code Online (Sandbox Code Playgroud)
或者
.//user
Run Code Online (Sandbox Code Playgroud)
这些东西是什么意思?
我想检查 shell 变量是否包含绝对路径。
我不在乎路径是否存在——如果它不存在,我将创建它——但我确实想确保我正在处理一个绝对路径名。
我的代码如下所示:
myfunction() {
[ magic test to see if "$1" is an absolute path ] || return 1
mkdir -p "$(dirname "$1")" || return 1
commands >> "$1"
}
Run Code Online (Sandbox Code Playgroud)
或者,要验证的绝对路径是目录的用例:
anotherfunction() {
[ same magic test ] || return 1
mkdir -p "$1"
dostuff >> "$1/somefile"
}
Run Code Online (Sandbox Code Playgroud)
如果是这样,awk我会像这样进行检查:myvar ~ /^\//
还有必须是干净的方式与外壳的字符串处理要做到这一点,但我有想出它的麻烦。
(提及一个bash特定的解决方案会很好,但我想知道如何以可移植的方式执行此操作。POSIX 字符串处理似乎应该足够了。)
当我将目录更改为 时//,它似乎将我置于一个与 非常相似但略有不同的特殊目录中/。但是,尝试添加任何进一步的斜杠 ( ///) 只会让我陷入/.
$ cd / ;pwd
/
$ cd // ;pwd
//
$ cd /// ;pwd
/
$ cd //// ;pwd
/
Run Code Online (Sandbox Code Playgroud)
这似乎//有点特殊,即使它具有相同的目录和所有内容,它仍然是pwd. 为什么是这样?为什么我的工作目录可以是//但不是///?
是否真的find不应该进行最简单的路径统一/简化操作,例如将多个连续的斜杠合并在一起(相当于原始形式)?
例如输出find .///是:
.///
.///somefile
[…]
Run Code Online (Sandbox Code Playgroud)
(测试find来自 GNU 和busybox)
如果是这样,那是为什么?有没有我遗漏的合理用例?也许对于有人正在搜索find内部脚本的输出的情况?
顺便说一句,同样有趣的是 GNU 的 find for find ./// -maxdepth 0 -printf '%h\n'(的输出%h应该是“文件名的前导目录(除了最后一个元素和它之前的斜杠之外的所有目录)”):(.//只是少了一个/)
filenames ×4
slash ×3
bash ×2
find ×2
command-line ×1
development ×1
directory ×1
filesystems ×1
history ×1
ksh ×1
linux ×1
path ×1
posix ×1
pwd ×1
shell ×1
shell-script ×1
standard ×1
string ×1
symlink ×1
terminology ×1