use*_*est 4 bash path shell-script variable
我的脚本中有这个。但是正在返回错误。如果我在控制台中执行命令工作正常
./script.sh[16]: mv: not found [No such file or directory]
Run Code Online (Sandbox Code Playgroud)
我想将一些以 T353 开头的文件从一个文件夹移动到另一个文件夹。REMOTE_PATH是 /tmp/,PATH是我的工作目录
cd $REMOTE_PATH
mv T353* $PATH #this is the line 16
Run Code Online (Sandbox Code Playgroud)
如果我make mv /tmp/T353* .工作正常。
Kus*_*nda 20
您似乎PATH在脚本中使用了该变量。这恰好是 shell 用来查找可执行文件的变量。这意味着,如果您将其更改为不是以 -:分隔的路径列表的其他内容,或者更改为不包含脚本使用的可执行文件的路径,shell 可能不再找到类似mv或其他标准实用程序的内容。
出于这个原因,最好在 shell 脚本变量中使用小写字母(这是一个品味问题1),或者至少要意识到 shell 用于各种事情的变量,并且您应该避免修改这些,除非,当然,您想改变 shell 的行为。
Bash 使用的变量列在 Bash 手册的“Shell 变量”标题下。
顺便说一句,cd上面的行确实有效。这是因为它是一个内置于 shell 本身的特殊实用程序。因此,shell 不必查看$PATH它的位置。
顺便说一句,你说那$PATH是你的工作目录。shell 已经将当前工作目录存储在$PWD.
作为旁注,养成双引号变量的习惯。请参阅“忘记在 bash/POSIX shell 中引用变量的安全隐患”。
1 好吧,大多数情况下,但 POSIX 标准为shell 和标准实用程序集合使用的环境变量(即导出的 shell 变量)保留了大写变量的命名空间。AFAIK,它不允许在非导出的 shell 变量中使用大写字符,但定义命名空间的全部目的是避免冲突。由于对于脚本而言,环境变量和 shell 变量具有相同的语义,因此最好完全避免使用大写变量。