我使用 CentOS 共享服务器环境和 Bash。
ll "$HOME"/public_html/cron_daily/
带来:
./
../
-rwxr-xr-x 1 user group 181 Jul 11 11:32 wp_cli.sh*
我不知道为什么文件名最后有一个星号。我不记得添加过它,当我尝试更改它时,我得到了以下输出:
[~/public_html]# mv cron_daily/wp_cli.sh* cron_daily/wp_cli.sh
+ mv cron_daily/wp_cli.sh cron_daily/wp_cli.sh
mv: `cron_daily/wp_cli.sh' and `cron_daily/wp_cli.sh' are the same file
此错误可能表明我的 Cpanel cronjob 失败的原因:
更改文件或运行 Cpanel cron 命令时我是否做错了什么?因为这两个操作似乎都失败了。
答案1
星号实际上并不是文件名的一部分。您看到它是因为该文件是可执行的,并且您的别名ll
包含以下-F
标志:
-F
在每个目录路径名后立即显示斜杠 ('/'),在每个可执行文件后显示星号 ('*'),在每个符号链接后显示 at 符号 ('@'),在每个符号链接后显示等号 (`=') ) 在每个套接字后面,在每个空白后面有一个百分号 ('%'),在每个表示 FIFO 后面有一个竖线 ('|')。
正如 Kusalananda 提到的,你不能像这样使用 cron 来遍历目录中的所有脚本。使用 run-parts,您可以调用"$HOME"/public_html/cron_daily/
执行目录中的所有脚本(不仅仅是 .sh)或循环遍历它们,如中所述这个帖子。
答案2
杰西_b已经回答了这个问题,但我认为值得解决一些潜在的误解。
shell 中的字符在某些特定条件下具有特殊含义。例如:|
用于管道、>
重定向、\
转义字符等。这些字符不会由 shell 按字面意思解释,所以这就是为什么当您这样做时echo foo>bar
,foo>bar
不会被打印到您的终端,而是foo
会被重定向到bar
文件。
幸运的是,shell 还有一种机制可以使这些字符失去其特殊含义:引用。在 POSIX shell 中,有3种报价机制:
- 反斜杠
\
:保留后续字符的字面值,但<newline>
. - 双引号
"..."
:保留双引号内所有字符的字面值,但字符`
、$
和除外\
。 - 单引号
'...'
:保留单引号内每个字符的字面值,无一例外。
因此,按照前面的示例,如果我们想foo>bar
按字面打印,我们可以这样做:
echo foo\>bar
echo "foo>bar"
echo 'foo>bar'
星号*
是这些特殊字符之一,它是模式匹配符号并用于文件名扩展。换句话说,诸如之类的命令echo *.txt
会将模式替换为模式匹配的文件。
在你的例子中,cron_daily/wp_cli.sh*
只有 matches cron_daily/wp_cli.sh
,所以mv
看到 2 个相同的参数并抱怨它。没关系,因为没有cron_daily/wp_cli.sh*
文件。但是,如果您有一个实际cron_daily/wp_cli.sh*
文件和更多可以与该模式匹配的文件,mv
则会失败。
考虑以下场景:
$ ls -l
total 0
-rw-rw-r-- 1 user group 0 jul 14 12:00 file*
-rw-rw-r-- 1 user group 0 jul 14 12:00 file1
-rw-rw-r-- 1 user group 0 jul 14 12:00 file2
-rw-rw-r-- 1 user group 0 jul 14 12:00 file3
如果我尝试file*
在不使用引号的情况下重命名:
$ mv file* new_file
mv: target 'new_file' is not a directory
这是因为这些是接收的参数mv
,因此new_file
预计是一个目录:
$ printf '[%s]\n' file* new_file
[file*]
[file1]
[file2]
[file3]
[new_file]
要成功重命名file*
,我需要引用该参数:
$ mv 'file*' new_file
$ ls -l
total 0
-rw-rw-r-- 1 user group 0 jul 14 12:00 file1
-rw-rw-r-- 1 user group 0 jul 14 12:00 file2
-rw-rw-r-- 1 user group 0 jul 14 12:00 file3
-rw-rw-r-- 1 user group 0 jul 14 12:00 new_file