我想检查我的机器(RedHat)上是否存在一个命令,它位于perl脚本中。
我试图检查compgen -c是否包含所需的命令,但是从脚本内部运行它只会给出一个空的输出。其他命令可以正常工作。
example.pl:
my $x = `compgen -c`;
print $x;
# empty output
my $y = `ls -a`;
print $y;
# .
# ..
# example.pl有可能解决这个问题吗?还是有更好的方法来检查我的机器上的命令呢?
发布于 2022-10-25 12:47:50
这是因为compgen是内置的bash命令,而不是外部命令。当您使用backticks运行命令时,您将得到系统的默认shell --它可能是/bin/sh,而不是bash。
解决方案是显式地运行bash,使用-c命令行选项给它一个要运行的命令。
my $x = `bash -c compgen -c`;在bash提示符中,您可以使用type查看命令是如何实现的。
$ type ssh
ssh is /usr/bin/ssh
$ type compgen
compgen is a shell builtinhttps://stackoverflow.com/questions/74193091
复制相似问题