在windows cmd中用带百分号的引号传递参数

ecbunoof  于 2021-05-29  发布在  Hadoop
关注(0)|答案(0)|浏览(343)

我正在尝试使用hadoop的 stat 命令从我的hdfs检索文件信息。在linux上,将格式化字符串传递给 stat (与gnu类似 stat 内置)例如:

$ hdfs dfs -stat "type:%F perm:%a %u:%g size:%b mtime:%y atime:%x name:%n" /file

但我不知道如何让它在windows下工作 cmd 提示:

C:\> hdfs dfs -stat "type:%F" /file

C:\> hdfs dfs -stat "type:%F" /
-stat: java.net.URISyntaxException: Relative path in absolute URI: type:F
...

…它似乎试图将第一个参数解释为路径,而不是第二个参数。所以我想“也许我需要包括字面上的引号?”试图用 ^" 不起作用:

C:\> hdfs dfs -stat "^"type:%F^"" /
-stat: java.net.URISyntaxException: Relative path in absolute URI: ^^type:F
...

…事实上,它看起来像是自动逃脱了 ^ 我发过去了,但没有发任何报价。试图用单引号而不是双引号将整个论点括起来也是行不通的:

C:\> hdfs dfs -stat '^"type:%F^"' /
-stat: java.net.URISyntaxException: Relative path in absolute URI: 'type:F'
...

这一次,它包含了单引号,但再次跳过了双引号。双重逃离克拉也不管用:

C:\> hdfs dfs -stat '^^"type:%F^^"' /
-stat: java.net.URISyntaxException: Relative path in absolute URI: 'type:F%5E%5E'
...

三次逃脱克拉产生相同的结果使用一个单一的克拉。
我发现一个笨拙的解决方案是用 %3 ,而不是用引号括起来

C:\> hdfs dfs -stat %3%u /
3Andrew.Watsonuu

C:\> hdfs dfs -stat %3%u%g /
3Andrew.Watsonsupergroupgg

…但是您可以看到返回的字符串 3 开始时,最后一个标志字符在结束时加倍 uu 或者 gg . 我想这是因为 %N 转换为我传递给该函数的参数,如:

C:\> hdfs dfs -stat %0 /
stat: `hadoop': No such file or directory
2019-09-25 12:28:00

C:\> hdfs dfs -stat %1 /
stat: `fs': No such file or directory
2019-09-25 12:28:00

C:\> hdfs dfs -stat "%2" /
-stat: Illegal option -stat

你看得出来 %0 , %1 ,和 %2 对应于该命令中的第一个、第二个和第三个标记。所以当我调用%3时,它将第四个参数替换为它自己。这就解释了奇怪的重复的、有问题的输出:

C:\> hdfs dfs -stat %3"repeat" /
3repeat"repeat"repeat

因此,到目前为止,我提出的最佳解决方案是在末尾传递一个多余的参数(这将引发错误),然后在命令的前面引用该参数,如:

C:\> hdfs dfs -stat -R %6 / "%%u %%g %%Y" 2> nul
Andrew.Watson supergroup 1569414480510
Andrew.Watson supergroup 1568728730673
...
Andrew.Watson supergroup 1568103636381
Andrew.Watson supergroup 1568103590659

它在最后抛出那个错误,我通过管道把它隐藏起来 nul . 一定有更好的办法。有什么想法吗?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题