【发布时间】:2021-01-30 13:01:09
【问题描述】:
我有一些使用 jsch 连接到我们的 unix 服务器并在命令下运行的 java 代码。
ls -lt /tempdirectory/ grep -v '^do | grep "$"(日期 '+%b %e')" | 头 -1 | awk '{print %9}'
上面的命令以长格式显示 /temp 目录中的所有文件(第一个管道删除目录)。然后从结果中筛选出今天创建的所有文件(即它 greps 为“Oct 16”)。因为我做了 ls -lt 文件是按时间排序的,所以当我对 head -1 进行管道时,我今天会得到最新的文件。然后最后一个管道会打印出文件名
在普通的 putty 终端上,一旦我切换到 bash shell 并运行上面的命令,它将正确打印出今天的最新文件。
但默认 shell 似乎是 Bourne (-sh),上面的命令会失败(因此我的代码会失败)
有没有一种方法可以创建对普通 shell 安全的上述命令?我认为我在工作中看到的主要 shell 是:
伯恩 (sh) 再次伯恩(bash) 科恩 (ksh)
【问题讨论】:
-
请注意,在现代系统上,
sh不是 Bourne 而是 POSIX sh。这个 1992 年的标准(与 1970 年代的 Bourne 相比)要求包含$(...)。我强烈反对任何关于 POSIX 之前的 Bourne 在 2020 年“普遍”的说法。 -
我所知道的在过去 20 年中交付真正 Bourne 的唯一操作系统供应商是 Sun。绝对其他人都在使用真正的 POSIX
sh。 -
啊我的操作系统是sunOS哈哈
-
系统上也可能有 POSIX sh。我想说
/usr/xpg/bin/sh之类的东西。