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

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

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

Возможно ли это вообще?

решение1

Если программа требует, чтобы вы перешли cdв каталог, и программа не может быть изменена, вы не можете запустить эту программу без cd-ing в этот каталог. Это так просто.

Однако вы можете запустить вторую оболочку, которая cd-s в каталог и выполняет программу. Когда программа завершается, вторая оболочка завершается и, поскольку ваша основная оболочка не завершилась cd, вы все еще находитесь в том же месте.

Вот краткий пример:

$ alias ptmpdir="bash <<< 'cd /tmp ; pwd'"
$ ptmpdir
/tmp

Это, как указал Камил Мациоровски в комментариях, помещает команду в STDIN оболочки. Это работает нормально, если программа не использует STDIN, как pwdв примере, и не проверяет наличие ошибок.

alias lstmpdir="bash -c 'cd /tmp && ls' ls"

проверяет наличие ошибок и выдает правильный код выхода в случае cdсбоя:

$ alias ptmpdir="bash -c 'cd /hop && ls' ls"
$ if ptmpdir ; then
> echo yes
> else
> echo no
> fi
ls: line 0: cd: /hop: No such file or directory
no

Если вы хотите передать аргументы команде, псевдоним становится запутанным и еще более сложным для понимания. В этом случае функция была бы лучше:

$ hop(){ bash   -c 'cd /tmp && exec ls "$@"' ls "$@" ; }
$ hop
7iCipjf8J7         eh._2700550        in.clean.1285563                          tmp-ntt.xpi
MozillaMailnews    <rest deleted>

$ hop -lrt
total 56496
drwxrwxr-x 3 ljm      ljm          4096 Nov  5 17:28 gimp
drwxrwxr-x 2 ljm      ljm          4096 Nov  5 18:14 jna-107183
-rw------- 1 ljm      ljm             0 Nov  6 00:17 config-err-Ol5gyl
drwx------ 2 ljm      ljm          4096 Nov  6 00:17 ssh-FqqWxHh4jhu8
<rest deleted>

Связанный контент