正在运行从任何地方打开相对文件路径的应用程序

正在运行从任何地方打开相对文件路径的应用程序

我有一个应用程序,它在启动时会打开相对于可执行文件的文件(此文件路径静态编译为程序二进制文件,我无法修改它)。我想为它创建一个别名,这样就可以在系统中的任何位置运行,而无需先“cd”进入其文件夹以确保可以找到文件。

那可能吗?

答案1

如果程序要求您cd进入目录,并且程序无法更改,则您无法在不cd进入该目录的情况下运行该程序。就这么简单。

但是,您可以启动第二个 shell,然后cd进入目录并执行程序。程序完成后,第二个 shell 终止,而由于主 shell 并未终止cd,因此您仍处于同一位置。

举一个简单的例子:

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

正如 Kamil Maciorowski 在评论中指出的那样,这将命令放在 shell 的 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>

相关内容