![如何在shell脚本中测试未知命令?](https://linux22.com/image/34394/%E5%A6%82%E4%BD%95%E5%9C%A8shell%E8%84%9A%E6%9C%AC%E4%B8%AD%E6%B5%8B%E8%AF%95%E6%9C%AA%E7%9F%A5%E5%91%BD%E4%BB%A4%EF%BC%9F.png)
我想知道,是否有一种方法可以通过 shell 脚本并为每个命令获取警告,这是未知的。
我知道bash -n
语法检查,但它没有告诉我,是否有命令不可用。
当然,运行代码不是一种选择。
答案1
一般来说这是不可能的,因为脚本可以包含类似的内容
read $command
"$command" -rf /
在现实生活中,命令将被清理或从列表中选取,但仍然不可能提前知道哪些命令是可能的。
答案2
尝试明确地执行此操作:
test_apps="command1 command2 command3"
for cmd in $test_apps; do
type &>/dev/null $cmd && echo "$cmd installed" ||
echo >&2 "$cmd not installed"
done
或者,如果您将命令放在完整的路径中:
grep -oP '^\s*/.*/\K.*' script.sh |
xargs -I% which % 2>&1 |
grep -oP '^\w+:\s+\Kno\s+\S+'
答案3
我倾向于做这样的事情:
if ! which dos2unix > /dev/null; then
echo "Error: dos2unix not installed!"
exit 1
fi