0

我一直在研究一个小脚本,它可以打开 gedit 或我的 Linux 框中的任何编辑器,以编辑PATH变量中包含的文件夹中的另一个脚本。

我正在使用which查找脚本的路径,以便我可以将路径提供给编辑器并开始编辑该脚本。脚本的名称显然是脚本的第一个参数。

问题是which当它作为另一个脚本的第一个参数给出时找不到脚本,但如果我直接使用它会找到路径。

这是一个更清楚的例子。

which script.sh
prints "/home/bla/bla/script_folder/script.sh

但如果我在这样的脚本中使用它:

echo "ScriptPath: $(which 1)"
echo "ScriptName: $1"

由于某些奇怪的原因,这将不起作用。我确实知道参数 1 中使用的脚本的位置在我的 PATH 变量中可用。Echo我给它时不会打印任何东西$(which 1),假设$1是我正在寻找的脚本的名称。我不知道为什么会这样。然后我决定将脚本的名称放在一个变量中,然后使用它来查找新变量包含的任何内容(在我的情况下是脚本的名称),但它也不起作用。

前任:

scriptName="$1"
echo "$(which scriptName)"
This won't work either.
Such a simple thing, and I cannot make it work for some weird reason. Any ideas why this is not working?
4

2 回答 2

1

正如@glenn jackman 评论的那样:您需要使用$来引用变量,即使是在$( ). 因此,该命令 echo "ScriptPath: $(which 1)"查找名为“1”的命令。您想要的是echo "ScriptPath: $(which "$1")"(请注意,像$1双引号一样包装变量引用几乎总是一个好主意)。相似地:

scriptName="$1"
echo "$(which scriptName)" # doesn't work, looks for a command named "scriptName"
echo "$(which "$scriptName")" # works as expected
于 2013-05-28T21:13:11.490 回答
0

我很确定您对 $(which 1) 有误,您需要将要运行的命令放在反引号中:`which $1`

echo "Script Path: `which $1`"
echo "Script Name: $1"
于 2013-05-28T21:00:26.797 回答