Я не согласен с @ Дэниел-Андерсон. Я не думаю, что эти решения должным образом учитывают аргументы вызываемой программы. Почти все исполняемые файлы обрабатывают аргументы пути относительно текущего каталога, поэтому даже передача аргументов через них не сработает.
Единственный случай, когда программа будет вести себя иначе, если она вызывается из symlink
- это если она проверяет 0-й аргумент. Я не знаю способа обойти это, используя символическую ссылку. Простейший обходной путь - создание промежуточного сценария оболочки в виде:
#!/bin/sh
/path/to/executable/that/needs/0th/argument/to/be/actual/path $@
Обратите внимание, что если по какой-то причудливой причине вам нужно дать ему 0-й аргумент, который на самом деле не там, где он есть, вы можете использовать exec -a следующим образом:
#!/bin/bash
(exec -a /path/to/executable/to/fool /path/to/fool/executable/with $@)
Обратите внимание, что аргумент "-a" может не соответствовать спецификации POSIX, поэтому я использовал bash специально. Предполагая, что в вашем пути есть папка ~/bin, первый (нормальный) случай может быть быстро выполнен следующим образом:
echo -e '#!/bin/sh\n/path/to/executable $@' > ~/bin/shortcut
chmod 755 ~/bin/shortcut
shortcut