我们有env(1)来修改我们要运行的命令的环境(例如env MANPAGER=more man dtrace
)。除了修改要在其中启动命令的目录之外,是否有类似的东西?
理想情况下,我希望它看起来像这样:
theMagicCommand /new/cwd myProgram
这样,它可以与其他类似 env(1) 的命令“链接”,例如,
daemon -p /tmp/pid env VAR=value theMagicCommand /new/cwd myProgram
到目前为止,我可以想到以下解决方案,遗憾的是它没有与env(1)相同的接口:
cd /new/cwd && myProgram
另外,我可以像这样创建一个简单的 shell 脚本:
#! /bin/sh -
cd "${1:?Missing the new working directory}" || exit 1
shift
exec "${@:?Missing the command to run}"
但我正在寻找已经存在的东西(至少在 macOS 和 FreeBSD 上)。
myProgram
不一定是桌面应用程序(在这种情况下,我可以只使用.desktop 文件中的Path键)。
AFAIK,POSIX 工具箱中没有这样的专用实用程序。但是在像在脚本
sh
中那样运行命令之前调用以设置环境(cwd、limits、stdout/in/err、umask...)是很常见的。sh
但是您不必在文件中编写该脚本,您可以内联它:
(假设目录不是
-
)。添加CDPATH=
(如果环境中有一个)并-P
使其表现得更像一个直的chdir()
.或者,您可以使用
perl
whochdir()
did a straightchdir()
out of the box。daemontools 世界和其他地方使用的工具集有这个以及更多;已经有很多年了;并且可以广泛使用。
runtool
:cd
:chdir
:所有这些都是链加载工具,旨在用于这些类型的链。这些工具包中有多种用于其他用途的链式加载工具。
进一步阅读
有这样一个受欢迎的节目。它被称为......抓住你的椅子......鼓声
env
...... GNU 版本,从 8.28 版开始,而不是 POSIX,具有-C
允许您根据需要设置目录的选项:某些程序对此有一个选项,例如 Git:
和做:
和焦油: