【问题标题】:Create symbolic link with dependency to other files创建依赖于其他文件的符号链接
【发布时间】:2011-06-29 00:31:20
【问题描述】:

我知道我的主题有点混乱,但这是我想做的。

我有一个文件,我想创建一个指向我家 ~/bin 的链接,但是当我在运行文件(shell 脚本)时创建指向该文件的链接时,该文件需要在其目录中添加另一个文件。因此,它无法运行,因为它找不到其他文件。我能做些什么?

谢谢

【问题讨论】:

  • 也添加指向其他文件的链接。

标签: linux bash shell ubuntu symlink


【解决方案1】:

嗯,你有两个简单的解决方案。

  1. 编辑 shell 脚本以指向文件的绝对路径,而不仅仅是基本名称。

    ./path/to/file.sh VS file.sh

    所以这样的事情应该做你之后的事情。 sed -i 's|file.sh|./path/to/file.sh|g' ~/bin/script.sh 它搜索您的符号链接文件,在本例中为 script.sh,并将对 file.sh 的调用替换为 ./path/to/file.sh。请注意,您经常看到 sed 使用 /'s。但它几乎可以使用任何东西作为分隔符,如果你想在这里使用/,你需要将它们转义。 /。您可能要考虑转义 . (句点)也是如此,但在这种情况下它不是必需的。如果您是sed 的新手,请意识到-i 标志意味着它将就地编辑文件。最后,实现其简单的搜索和替换操作,您可以选择手动进行。

  2. 第二种方法是为该文件创建一个ln -s,就像您对另一个文件所做的那样,因此两个文件之间存在符号链接。

    ln -s /far/off/script.sh ~/bin/script.sh

    ln -s /far/off/file.sh ~/bin/file.sh

more on symlinking

【讨论】:

  • 数字 UNO FTW!
【解决方案2】:

或者,您可以将脚本修改为

pushd ~/bin

##### your script here

popd

【讨论】:

    【解决方案3】:

    readlinkdirname 组合会得到脚本的实际目录:

    my_dir=$(dirname "$(readlink -f "$0")")
    source "$my_dir/other_file"
    

    【讨论】:

      【解决方案4】:

      我宁愿在 ~/bin/` 中创建一个脚本文件,从适当的目录调用您的可执行文件。

      这是一个使用 /sbin/ifconfig 的示例:

      $ cat > ~/bin/file
      #!/bin/bash
      
      file=/sbin/ifconfig
      cd `dirname $file`
      `basename $file` 
      (ctr+d)
      $ chmod +x ~/bin/file
      $ file
      

      在这里您应该看到ifconfig 的输出,但重点是:它是从/sbin 目录执行的。因此,如果 ifconfig 具有依赖项,它将正常工作。只需将/sbin/ifconfig 替换为您的绝对路径即可。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-08
        • 1970-01-01
        • 2023-01-09
        • 2017-05-12
        • 1970-01-01
        • 2013-09-18
        相关资源
        最近更新 更多