我有一个应用程序,它在启动时会打开相对于可执行文件的文件(此文件路径静态编译为程序二进制文件,我无法修改它)。我想为它创建一个别名,这样就可以在系统中的任何位置运行,而无需先“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>