如何在bash中打开一个我不知道路径的程序

时间:2017-07-18 19:10:58

标签: bash

问题是没有存储程序路径。

#!/bin/bash
read -p "Enter progam name: " name
path=which $name
nano $path

2 个答案:

答案 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}")