创建一个“ln -s”来检查损坏的符号链接

创建一个“ln -s”来检查损坏的符号链接

我正在尝试编写一个函数ln()(如果调用它不是一个好主意ln,它可能只是调用myln()它或其他什么,但这并不重要)bash,这样,

  • 如果短选项-s不存在,它只会command ln执行
  • 如果短选项-s确实存在,它将执行所做command ln的操作,除非要创建的符号链接包含损坏的链接。在这种情况下,它会向 stderr 打印警告,并且不会创建链接(或创建链接并随后立即将其删除)

由于该命令ln以各种极其通用的形式提供选项,因此我不确定如何编写这样的函数来涵盖所有可能性。我确实知道如何编写它以实现简单的用法,例如ln -s [absolute path 1] [absolute path 2].

最好该函数能够涵盖ln最新版本中的用法GNU coreutils(提出问题时最新版本是 8.31),但仅涵盖 in 的用法的函数POSIX也可以。

边注:我已经写了一个“防错rmhttps://codereview.stackexchange.com/a/215226/155325,我想做类似的事情来做到“防故障” ln。我自己正在使用它,我知道后果。我不会将它分发给不熟悉 Linux 的人并说“嘿,你应该rm从现在开始使用它,你可以忘记这些警告rm /*

答案1

不确定这是否是您想要的,但在您的函数中,您可以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 $?
1

相关内容