我正在尝试编写一个函数ln() (如果称它为ln不是个好主意,那么它可能就像myln()之类的一样好,但这并不重要),所以,
-s不存在,它只执行command ln所做的操作。-s确实存在,它将执行command ln所做的事情,除非要创建的符号链接(S)包含断裂的链接。在这种情况下,它会将警告打印到stderr,而不会创建链接(或者创建链接,然后立即删除)。由于命令ln以非常灵活的各种形式使用它的选项,所以我不知道如何编写这样的函数来涵盖所有的可能性。我确实知道如何编写它,以便像ln -s [absolute path 1] [absolute path 2]这样简单地使用。
如果该函数能够涵盖ln在GNU coreutils的最新版本中的用法(在提出问题时最新版本为8.31),这是最好的,但是一个只涉及POSIX中的用法的函数也可以。
Side注释:我已经在https://codereview.stackexchange.com/a/215226/155325中编写了一个“故障保护”rm,我想做一些类似的事情来创建一个“故障保护”ln。我自己也在用它,我知道后果。我不会把它分发给不熟悉Linux的人,并说:“嘿,从现在开始,你应该使用这个rm,你可以忘记rm /*的警告。”
发布于 2019-04-27 07:09:12
不确定这是否是您想要的,但是在您的函数中,您可以在创建符号链接之前使用namei命令检查目标文件。
$ touch file1
$ ln -s file1 file2
$ ln -s file2 file3
$ namei file3
f: file3
l file3 -> file2
l file2 -> file1
- file1
$ echo $?
0
$ rm file1 # break first symlink
$ ls -l
$ namei file3
f: file3
l file3 -> file2
l file2 -> file1
file1 - No such file or directory
$ echo $?
1https://unix.stackexchange.com/questions/515810
复制相似问题