Bash:文件中一行的路径或链接?

WAF*_*WAF 6 bash path hard-link files

/path/to/fname#line1242
Run Code Online (Sandbox Code Playgroud)

有没有办法将文件中的特定行号作为路径名的一部分引用,或者以某种方式将链接打包到看起来/行为像路径名的行号?例如,将上面的字符串提供给同一文件系统的另一个用户,以便他们可以轻松打开我的文件“fname”并立即位于其中的第 1242 行。

我正在考虑类似于 HTML 锚点的行为,它可以包含在页面的 URI 中,然后表现得就像链接一样。也就是说,它们可以提供给同一文件系统的其他用户,并向这些用户指示文件中的给定行,默认情况下打开文件到该行。我意识到在 UNIX 中,唯一真正可以成为路径名一部分的东西可能是目录、文件和伪文件。但是,还有 glob、字符串扩展等,它们严格来说并不是路径名的一部分,但可以“舒适地”插入其中,而文件名可以被传递和引用,而不需要任何额外的命令。是否有一种内联方法可以模拟 UNIX 文件的锚点/链接行为?

我可以在我的“路径名”中包含命令替换和sed "1242p"某种自引用,但随后我不再处理路径名,而只是处理文件上的命令。想一想,那么我就不会链接,只是提取一行。我根本想不出链接到特定行的方法(不忽略文件的其余部分)。

GNU bash,版本 3.2.51

Sté*_*las 3

您可以创建一个名为+view +1242 fname. 然后在该文件上调用vior :view

view '+view +1242 fname'
Run Code Online (Sandbox Code Playgroud)

将打开fnamein并将光标放在第 1242view的开头(这里假设实现/ )。vimviview

或者做:

ln -s / '+view +1242 '
Run Code Online (Sandbox Code Playgroud)

所以你也是:

view '+view +1242 /etc/passwd'
Run Code Online (Sandbox Code Playgroud)

查看/etc/passwd第 1242 行。

或者:

touch '+exe "view +1242 \57etc\57passwd"'
Run Code Online (Sandbox Code Playgroud)

view是:

view '+exe "view +1242 \57etc\57passwd"'
Run Code Online (Sandbox Code Playgroud)

您还可以制作目标文件的顶行:

#! /usr/bin/less +1242
Run Code Online (Sandbox Code Playgroud)

并使其可执行 ( ) 并执行它,以便在1242行处chmod +x fname打开它。less