![不使用 shell 内置命令设置 shell 环境变量](https://linux22.com/image/45051/%E4%B8%8D%E4%BD%BF%E7%94%A8%20shell%20%E5%86%85%E7%BD%AE%E5%91%BD%E4%BB%A4%E8%AE%BE%E7%BD%AE%20shell%20%E7%8E%AF%E5%A2%83%E5%8F%98%E9%87%8F.png)
我正在使用一个程序,该程序将“命令”作为参数,然后在其周围添加一些有用的包装。大概是为了提供帮助,它似乎会检查以确保命令“存在”。据我所知,这张支票类似于which
.在我的 bash shell 中,set
和等命令export
是内置的,因此which
不会返回任何内容。
有没有一种方法可以在不使用 shell 内置命令的情况下设置环境变量。
我的想法是做一些类似定义的set.sh
事情
#! /bin/bash
export $1
但这似乎有些疯狂
答案1
不能。只有 shell 可以改变自己的环境;set
和export
必须始终是内置的。
cd
、alias
等也是如此。
我能建议的最好方法是使用 shell 函数重新实现包装器。或者是您“获取”的 shell 脚本。无论哪种方式,运行的包装器里面shell 可以更无缝地完成这些事情。
答案2
解决原始问题的一个可能的解决方法是为您的包装器提供一个包装器(不包括 Xzibit 图像):
#!/bin/bash
command="$1"
temp=$(mktemp -d)
> "$temp/$command"
chmod a+x "$temp/$command"
PATH+=:$temp
your_wrapper
rm -r "$temp"
这将创建一个空的可执行文件,它将通过包装器的测试,而不会覆盖您的命令实际上想要运行(内置)。