这个使用cut和sed的bash脚本有什么问题(cut:命令未找到)?

4
我将从NFS位置中获取服务器和路径的bash命令翻译如下:

我正在使用以下命令在bash中获取NFS位置的服务器和路径:

#!/bin/bash

ST="/net/10.111.111.111/path/to/some/dir"
echo $ST
SERVER=$(echo $ST | cut -d'/' -f3)
echo $SERVER
PATH=$(echo $ST | cut -d'/' -f4-)
echo $PATH
PATH=$(echo $ST | cut -d'/' -f4-)
echo $PATH

同样的两行故意重复。输出结果为:
/net/10.111.111.111/path/to/some/dir
10.111.111.111
path/to/some/dir
./nn.sh: line 9: cut: command not found

我得到了我想要的,但是我不明白为什么第二次调用PATH=会产生上述错误。 我错过了什么吗?

1个回答

11

PATH 是一个系统变量,bash shell 使用它来查找你的二进制文件(例如 cut)所在的位置。

因此,直到:

PATH=$(echo $ST | cut -d'/' -f4-)

所有的事情都按预期运行。但是在命令替换即 $(...) 之后,PATH 指向了一个非标准目录,bash 在其中找不到标准二进制文件。

因此,随后的命令为:

PATH=$(echo $ST | cut -d'/' -f4-)

您收到了错误信息:

./nn.sh: line 9: cut: command not found

道德准则

永远不要在脚本中使用大写变量,因为它们被系统保留。


作为一个附加提示,始终检查env中已经保留的变量。 - Steven Walton
@Lidia:哈哈,非常正确...最近我也感受到了后果。;) - sjsam

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接