我的剧本里有这个。但返回一个错误。如果我在控制台中执行命令效果很好
./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 变量具有相同的语义,因此最好完全避免使用大写变量。