如何创建一个符号链接来打开(字面意思)目标文件

gus*_*brs 6 symlink libreoffice

假设我bar.txt在目录中有一个文件foo并创建一个baz.txt指向foo/bar.txt. 喜欢:

./foo
./foo/bar.txt
./baz.txt -> foo/bar.txt
Run Code Online (Sandbox Code Playgroud)

如果我打开baz.txt我的编辑器会认为baz.txt是在目录中打开的.。有没有办法创建一个链接,而bar.txt不是(字面上)打开?

上下文(或我为什么要这样做):我有一个目录,其中包含大量文件,我在.odt保留在同一目录中的文件中对这些文件进行索引和评论。在这个.odt文件中,我创建了指向目录中索引文件的超链接,以便我可以轻松地访问具有(远)更多上下文的单个文件,而不仅仅是文件名。我将 LibreOffice 设置为将超链接保存为相对路径,以便这些链接可以在我的所有计算机中使用,这些计算机并不总是与我的用户文件具有相同的目录树。

我想为这个.odt文件创建一个符号链接(或等效的),但是(根据上面的例子)如果链接打开,baz.txt那么相对路径(从 LibreOffice 的角度来看)将是错误的。以前创建的超链接将不起作用,如果我碰巧在baz.txt(当然是比喻性的)中创建了一个超链接,它在原始bar.txt.

PSk*_*cik 12

不可以。但是您可以创建一个 libreoffice 包装器,该包装器将采用符号链接的每个参数并将其转换为$(readlink -f $the_symlink). 然后,您可以将文件管理器设置为通过该包装器打开 libreoffice 文件。

说唱歌手:

#!/bin/bash -e
args=()
for a; do
    case $a in 
        -*) args+=("$a");;  #skip flags (your file names don't start with -, right?)
        *)  if ! [ -L "$a" ]; then #not a link
                args+=("$a")
            else #link => target
                args+=( "$( readlink -f "$a")" )
            fi
            ;;
    esac
done
libreoffice "${args[@]}"
Run Code Online (Sandbox Code Playgroud)

现在,如果您chmod +x lowrapper将它放在 PATH 的某个目录中,然后将 libreoffice 文件的处理程序从libreoffice更改为lowrapper,那么 libreoffice 将打开链接目标而不是链接。