Bash 正在使用远程数据扩展 glob 模式
Bash glob pattern being expanded using remote data
我做错了:
s3cmd del s3://mybucket/*
但是……它正在工作:
...
delete: 's3://mybucket/file0080.bin'
delete: 's3://mybucket/file0081.bin'
delete: 's3://mybucket/file0082.bin'
...
我很困惑。通常 *
由 shell (Bash
) 扩展,使用 localhost
.
中可用的信息
How/why 扩展是否针对 s3
存储桶?
(这是一个不带引号的 glob 模式)
如果 glob 不匹配任何内容,它将保持原样(除非您在 Bash 中设置 nullglob
选项),在这种情况下带有星号,并且 s3cmd del
显然明白这一点。
当然,依赖这种行为并不是一个好主意,因为如果本地文件突然存在并且与 glob 相匹配,它(可能)会停止工作。引用 glob(即 而不是 glob)是一个好习惯。
另一种选择是设置 nullglob
选项 (shopt -s nullglob
) 使不匹配的 glob 完全消失。
要查看 glob 如何扩展以及最终命令的样子,您可以在 运行 之前在 Bash 中 运行 set -x
,这使得 Bash 在 运行 之前打印每个(扩展的)命令(set +x
将其关闭)。
我做错了:
s3cmd del s3://mybucket/*
但是……它正在工作:
...
delete: 's3://mybucket/file0080.bin'
delete: 's3://mybucket/file0081.bin'
delete: 's3://mybucket/file0082.bin'
...
我很困惑。通常 *
由 shell (Bash
) 扩展,使用 localhost
.
How/why 扩展是否针对 s3
存储桶?
(这是一个不带引号的 glob 模式)
如果 glob 不匹配任何内容,它将保持原样(除非您在 Bash 中设置 nullglob
选项),在这种情况下带有星号,并且 s3cmd del
显然明白这一点。
当然,依赖这种行为并不是一个好主意,因为如果本地文件突然存在并且与 glob 相匹配,它(可能)会停止工作。引用 glob(即 而不是 glob)是一个好习惯。
另一种选择是设置 nullglob
选项 (shopt -s nullglob
) 使不匹配的 glob 完全消失。
要查看 glob 如何扩展以及最终命令的样子,您可以在 运行 之前在 Bash 中 运行 set -x
,这使得 Bash 在 运行 之前打印每个(扩展的)命令(set +x
将其关闭)。