我一直在开发一个小脚本,打开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?
答案 0 :(得分: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
答案 1 :(得分:0)
我很确定你错了$(其中1) 你需要把你想要在反引号中运行的命令放在哪里:`哪个$ 1`
echo "Script Path: `which $1`"
echo "Script Name: $1"