问题是没有存储程序路径。
#!/bin/bash
read -p "Enter progam name: " name
path=which $name
nano $path
答案 0 :(得分:2)
path=which $name
这不是您需要的语法。这会调用存储在$name
中的命令,并在其环境中添加变量path=which
。如果您引用它,就像在path="which $name"
中一样,而是在您的环境中设置path
,但它会包含字符串which ...
(其中......是价值$name
)。
您正在寻找的是command substitution,它允许您捕获命令的输出。所以你应该这样做:
path="$(which "$name")"
这会将path
设置为which "$name"
的结果,这就是您想要的。
根据评论中的建议,您可以完全跳过path
变量,只需说:
nano "$(which "$name")"
您甚至可以完全跳过此脚本,假设您不介意记住语法,只需输入:
$ nano "$(which command-to-look-at)"
直接在提示中。
另一方面,如果你想要更强大的东西,你可以避免用这样的东西打开binary files(注意它是一个功能而不是一个脚本,你可以将它添加到你的{{1}如果您愿意,可以直接或将正文拉出到单独的脚本中:
.bashrc
这与文本文件的行为相同(尽管您将命令作为参数传递,如果设置了一个,它会使用您首选的inspect_command() {
local name="${1:?No command provided}"
local path
path=$(which "$name") || {
echo "No command '$name' found"
return 1
}
if [[ "$(file --brief --mime-encoding "$path")" == "binary" ]]; then
echo "$path appears to be a binary file."
local response;
read -p "Are you sure you'd like to continue? [y/N] " response;
[[ "$response" =~ ^([yY][eE][sS]|[yY])$ ]] || return 0
fi
"${EDITOR:-nano}" "$path"
}
),但在尝试打开二进制文件之前会发出警告。
EDITOR
答案 1 :(得分:-1)
使用find
代替which
。
path=$(find /some/base/path -type f -name "${name}")