mv :从修改 PATH 变量的脚本执行时未找到

mv :从修改 PATH 变量的脚本执行时未找到

我的剧本里有这个。但返回一个错误。如果我在控制台中执行命令效果很好

./script.sh[16]: mv: not found [No such file or directory]

我想将 T353 中开始的一些文件从一个文件夹移动到另一个文件夹。远程路径是 /tmp/ 并且小路是我的工作目录

cd $REMOTE_PATH
mv T353* $PATH #this is the line 16

如果我make mv /tmp/T353* .工作顺利的话。

答案1

您似乎PATH在脚本中使用了该变量。这恰好是 shell 用来查找可执行文件的变量。这意味着,如果将其更改为非:- 分隔的路径列表的其他内容,或者更改为不包含脚本使用的可执行文件的路径,则 shell 可能不再找到类似mv或其他标准实用程序的内容。

出于这个原因,最好在 shell 脚本变量中使用小写字母(这是一个品味问题1),或者至少要知道 shell 使用一些变量来执行各种操作,并且您应该避免修改这些变量,除非,当然,您想改变 shell 的行为。

Bash 使用的变量列在 Bash 手册中的“Shell 变量”标题下。

顺便说一句,cd上面一行工作。这是因为它是一个内置于 shell 本身的特殊实用程序。因此,外壳不必通过查看来$PATH找出它在哪里。

另外顺便说一句,你说那$PATH是你的工作目录。 shell 已将当前工作目录存储在$PWD.

附带说明一下,养成对变量进行双引号的习惯。看 ”忘记在 bash/POSIX shell 中引用变量的安全隐患”。


1 嗯,大多数情况下,但是 POSIX 标准保留大写变量的命名空间环境变量(即导出的 shell 变量)由 shell 和标准实用程序集合使用。据我所知,事实并非如此不允许大写字符的使用非导出的 shell 变量,但定义命名空间的全部目的是避免冲突。由于对于脚本来说,环境变量和 shell 变量具有相同的语义,因此最好完全避免使用大写变量。

相关内容