Создать символическую ссылку с зависимостью от других файлов - PullRequest
4 голосов
/ 29 июня 2011

Я знаю, что моя тема немного сбивает с толку, но вот что я хочу сделать.

У меня есть файл, который я хотел бы создать ссылку на мой дом ~ / bin, но когда я создаю ссылку на этот файл при запуске файла (сценарий оболочки), файл требует другого файла вего каталог.Поэтому он не запускается, потому что не может найти другой файл.Что я могу сделать?

Спасибо

Ответы [ 4 ]

2 голосов
/ 29 июня 2011

Ну, у вас есть два простых решения.

  1. отредактируйте скрипт оболочки так, чтобы он указывал на абсолютный путь к файлу, а не только на базовое имя.

    ./path/to/file.sh В.С. file.sh

    так что-то вроде этого должно делать то, что вы после. sed -i 's|file.sh|./path/to/file.sh|g' ~/bin/script.sh он ищет ваш символьный файл, в данном случае script.sh, и заменяет вызов file.sh на ./path/to/file.sh. обратите внимание, что вы часто видите sed use / 's. но он может использовать в качестве разделителя что угодно, если вы хотите использовать / здесь, вам нужно будет их избежать. /. Вы можете рассмотреть возможность избежать. (период), но в этом случае это не обязательно. Если вы новичок в sed, то поймите, что флаг -i означает, что он будет редактировать файл на месте. Наконец, реализуйте простую операцию поиска и замены, и вы можете сделать это вручную.

  2. Второй способ - создать ln -s для файла, как вы это сделали с другим файлом, чтобы между этими файлами существовала символическая связь.

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

    и

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

больше по символической ссылке

0 голосов
/ 29 июня 2011

Я бы лучше создал файл сценария в ~ / 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 на ваш абсолютный путь.

0 голосов
/ 29 июня 2011

Сочетание readlink и dirname приведет к фактическому каталогу скрипта:

my_dir=$(dirname "$(readlink -f "$0")")
source "$my_dir/other_file"
0 голосов
/ 29 июня 2011

Кроме того, вы можете изменить свой скрипт как

pushd ~/bin

##### your script here

popd
...