Questions tagged «posix»

POSIX是可移植操作系统接口(Portable Operating System Interface)的缩写,可移植操作系统接口是IEEE为维护操作系统之间的兼容性而指定的一系列标准。

2
如何在POSIX Shell脚本中创建算术循环?
我知道如何在中创建算术for循环bash。 如何在POSIX Shell脚本中进行等效循环? 由于有多种方法可以实现相同的目标,请随时添加您自己的答案并详细说明其工作原理。 一个这样的bash循环的示例如下: #!/bin/bash for (( i=1; i != 10; i++ )) do echo "$i" done

1
POSIX sed对于地址范围从已删除的行开始的“ 1d; 1,2d”有什么要求?
在对这个问题的评论中,出现了一个案例,其中各种sed实现在一个相当简单的程序上存在分歧,而我们(或至少我)无法确定规范对它的实际要求。 问题是从删除行开始的范围的行为: 1d;1,2d 即使在到达该命令之前删除了范围的开头,也应该删除第2行吗?我最初的期望是与BSD sed一致,“否”,而GNU sed说“是”,并且检查规范文本并不能完全解决问题。 符合我期望的是(至少)macOS和Solaris sed以及BSD sed。(至少)GNU和Busybox意见不同sed,这里有很多人。前两个通过SUS认证,而其他两个可能更广泛。哪种行为是正确的? 两个地址范围的规范文本显示: 然后,sed实用程序应按顺序应用其地址选择该模式空间的所有命令,直到命令开始下一个周期或退出为止。 和 具有两个地址的编辑命令应从与第一个地址匹配的第一个模式空间到与第二个地址匹配的下一个模式空间选择包含范围。[...]从选定范围后的第一行开始,sed将再次寻找第一个地址。此后,应重复该过程。 可以说,第2行是 内,不管开始点是否已删除“从通过相匹配的第二下一图案空间匹配的第一个地址中的第一图案空间包容范围”。另一方面,我希望第一个d继续进行下一个周期,而不给该范围一个开始的机会。UNIX™认证的实现可以实现我期望的功能,但可能不会达到规范的要求。 一些说明性的实验遵循,但关键的问题是:什么应该 sed在范围上已删除的行开始呢? 实验与范例 这个问题的简化展示是,它打印行的额外副本而不是删除它们: printf 'a\nb\n' | sed -e '1d;1,2p' 这提供sed了两行输入,a和b。该程序执行两件事: 用删除第一行1d。该d命令将 删除模式空间并开始下一个循环。和 从1到2中选择行范围,并明确打印出来,除了自动打印每行接收到的内容。因此,该范围内的一行应出现两次。 我的期望是应该打印 b 仅,由于不应用该范围,因为1,2在第1行期间从未达到该范围(因为已经d跳至下一个循环/行),因此范围内的包含从未被开始,a而已被删除。通常,sed与macOS和Solaris 10 兼容的Unix会产生此输出,与sedSolaris和BSD sed中的非POSIX一样。 另一方面,GNU sed打印 b b 表示它已经解释了范围。这在POSIX模式下都不会发生。Busybox的sed具有相同的行为(但并非总是相同的行为,因此它似乎不是共享代码的结果)。 进一步的实验 printf 'a\nb\nc\nd\ne\n' | sed -e '2d;2,/c/p' printf 'a\nb\nc\nd\ne\n' | …
11 sed  posix 

3
在POSIX sh中执行-nt / -ot测试
即使大多数外壳程序在“ POSIX模式”下运行,内置的test和[实用程序在大多数外壳程序中都具有-nt(“比...更新”)和-ot(“比...更旧”)测试(对于在外壳上使用相同名称的外部实用程序也是如此)我可以访问的系统)。这些测试用于比较两个文件上的修改时间戳。它们的文档化语义在不同的实现中略有不同(关于一个或另一个文件不存在的情况),但是它们不包含在POSIX规范中。为test实用。 他们不结转到test时,从[KornShell]壳去除有条件的命令,因为他们没有被列入工具test内置于历史实现实用sh工具。 假设我想比较/bin/shshell脚本中文件之间的修改时间戳,然后根据一个文件是否比另一个文件新来采取措施,如 if [ "$sigfile" -nt "$timestamp" ] || [ "$sigfile.tmp" -nt "$timestamp" ] then return fi ...除了make(这至少会使脚本的其余部分难以理解)之外,我还可以使用其他什么实用程序?还是我应该假设没有人会在“的历史实现sh” 上运行脚本,或者辞职以编写像这样的特定 shell bash?
11 files  timestamps  posix  test 

2
posix支持哪些字符编码?
POSIX定义的工具,如行为grep,awk,sed,等这些工作对文本文件。由于它是文本文件,因此我认为存在字符编码的问题。 题: POSIX支持什么字符编码?(或者,POSIX兼容系统可以处理哪种编码的文本文件?)

2
子外壳与子外壳是否相同
有两个名称:subshel​​l和child-shell。 是的,子进程将通过以下任何一种方式启动: sh -c 'echo "Hello"' ( echo "hello" ) echo "$(echo "hello") echo "hello" | cat 是否都相同并具有相同的名称?所有共享相同的属性吗? POSIX 具有以下定义: Shell执行环境由...组成。 但是上面链接的最后一段有: 子外壳程序环境应作为外壳程序环境的副本创建,但不忽略的信号陷阱应设置为默认操作。 特别是: 命令替换,用括号分组的命令以及异步列表应在子shell环境中执行。另外,多命令管道中的每个命令都在子shell环境中。.... 其中sh -c 'echo "Hello"'不包含,也应该称为subshel​​l吗?

2
[[.ch。]]在正则表达式中是什么意思?
替代标题:在符合POSIX的正则表达式中,“整理顺序”或“整理元素”是什么? 我在POSIX规范的9.3.5节中找到了确切的技术定义,将其作为列表中的第4个项目,但是对我来说还不是很清楚。 我用Google搜索周围的网站为例子和解释上,并提出了不完全两手空空,但绝对不开明。 我唯一要了解的是,在某些情况下,为了使长度比较和确定“最长匹配”是什么,您可以让正则表达式将多个字符当作单个字符对待(因为正则表达式贪婪且返回最长的匹配项)。 那是全部吗?我很难看到它的用途,但我怀疑我的理解还不完整。 正则表达式的“整理”实际上是什么? 以及如何[[.ch.]]在POSIX规范的例子,涉及到这个?

2
如何打开grep(1p)联机帮助页?
在末尾man grep,它说 SEE ALSO\ POSIX Programmer's Manual Page grep(1p). 我无法打开联机帮助页grep(1p)。我怎么做?搜索网络Unix.SE并进行了反复试验,但还没有走运。 试过了 $ man 1p grep $ man -K grep 编辑: 我在Ubuntu 14.10上
11 grep  man  posix 

2
为什么Linux / POSIX具有lchown但没有lchmod?
看来,Linux支持更改符号链接(即业主lchown),但改变一个符号链接的模式/许可(即lchmod)是不支持的。据我所知,这与POSIX一致。但是,我不明白为什么一个人会支持这两个操作中的任何一个而不是两者都支持。这背后的动机是什么?

1
为什么'find -exec cmd {} +'必须以'{} +'结尾?
前言:我了解-exec {} \;&的区别-exec {} +。我也没有问题,因为这样,我只是好奇的语义find。 当-exec以+而不是结束参数时;,我们需要以结束{} +,例如: # FreeBSD find $ find . -type f -exec cp {} /tmp + find: -exec: no terminating ";" or "+" # GNU find is even more cryptic: $ find: missing argument to `-exec' ;在这些示例中使用代替+可以很好地工作(但显然可以做其他事情)。 从POSIX: -exec utility_name [argument ...] ; -exec utility_name [argument …
11 find  history  posix 

2
是否可以使用“。” 在Ubuntu和OS X中的.bashrc中运行文件而不是源文件?
好的,因此source可以分别在当前外壳中运行该脚本.,例如,在运行脚本中使用“。”和“ source”进行了详细说明,但是,具体地说,在我的.bashrc文件中,我具有: [ -f ~/.bash_aliases ] && source ~/.bash_aliases [ -f ~/.git-completion.bash ] && source ~/.git-completion.bash [ -s ~/.autojump/etc/profile.d/autojump.sh ] && source ~/.autojump/etc/profile.d/autojump.sh 我可以将其替换为: [ -f ~/.bash_aliases ] && . ~/.bash_aliases [ -f ~/.git-completion.bash ] && . ~/.git-completion.bash [ -s ~/.autojump/etc/profile.d/autojump.sh ] && . ~/.autojump/etc/profile.d/autojump.sh 可以在OS X上使用-是“ POSIX”问题吗? 我尝试了一下,以上内容似乎仍然可以在Ubuntu上使用(因此它们实际上与sourceand都可以使用.,也就是说,它们在外壳程序中为我提供了所需的功能)。我应该选择一个,还是错过了什么? FWIW,在OS …
11 osx  bashrc  posix 

2
posix shell:打印环境变量名称列表(无值)
以与多种实现兼容的posix兼容方式,如何打印当前定义的环境变量列表而不包含它们的值? 在某些实现(mksh,freebsd / bin / sh)上,只需单独使用即可export: $ export FOO2 FOO 但是对于其他一些实现(bash,zsh,破折号),export也会显示该值。例如,使用bash: $ export export FOO2='as df\ asdk=fja:\ asd=fa\ asdf' export FOO='sjfkasjfd kjasdf:\ asdkj=fkajdsf:\ :askjfkajsf=asdfkj:\ safdkj' $ printenv | sed -n l FOO2=as\tdf\$ asdk=fja:\$ asd=fa\$ asdf$ FOO=sjfkasjfd kjasdf:\$ asdkj=fkajdsf:\$ \t:askjfkajsf=asdfkj:\$ safdkj$ 其他选项(例如,env或printenv没有选项)仅显示不带值的变量名,至少在我尝试过的linux和freebsd平台上不行。 管道到awk / sed / etc。或使用参数扩展技术(例如${foo%%=*})修剪列表是可以接受的,但是它必须使用可能跨越行且值中带有=空格的值(请参见上面的示例)。 特定于特定Shell实现的答案很有趣,但是我主要是在寻找在各个实现之间都兼容的东西。

1
在bash中完成POSIX中的间接变量扩展?
有可能吗,或者有一些不错的技巧可以像在Bash中一样在POSIX中进行间接变量扩展? 对于上下文,我正在尝试执行以下操作: for key in ${!map_*} do # do something done 编辑:澄清一下,我想访问以开头的shell变量map_。

1
POSIX是否保证标准实用程序在PATH中?
在“命令搜索和执行”部分中,POSIX规范指出PATH在找到要执行的实用程序时会进行搜索(某些例外)。规范中是否提到了PATH将初始化为可确保找到所有标准实用程序的值的任何地方? 还是我需要执行以下操作以确保在尝试运行标准实用程序时永远不会出现“找不到命令”错误? PATH=$(command -p sh -c 'printf %s "${PATH}"') (请参阅实用程序的POSIX规范command)
11 path  posix  standard 

3
posix / chmod中的大写X是什么?
我知道什么是ugoa(所有者,组,其他全部)或RWX(读/右/执行)或4,2,1或-,f,d,l,,我试图在阅读man chmod理解什么是资本X的chmod,但有没有一个条目。然后,我在posix / chmod中阅读了这篇文章,但被这段文章所困: 仅当目标a)是目录b)已为用户,组等中的任何一个设置了至少一个可执行位时,才设置可执行位。 我还读了这篇文章,给出了以下代码示例: chmod -R u=rwX,g=rX,o=rX testdir/ 我了解testdir/对所有者(u),组(g)和其他人(o)拥有的递归许可,但我承认我仍然怀念大写X的意图。 也许此处的教学措辞可以对此有所启发(我在此处发布此文档的主要原因是因为我没有找到关于此的SE会议)。 更新资料 抱歉,我错过了那个男人。我没有想到X会出现在参数列表之前,我以为搜索返回x而不是X,这很糟糕。

4
如何POSIX-ly计算字符串变量中的行数?
我知道我可以在Bash中做到这一点: wc -l <<< "${string_variable}" 基本上,我发现的所有内容都涉及<<<Bash运算符。 但是在POSIX shell中,它<<<是未定义的,而且我几个小时都无法找到替代方法。我很确定有一个简单的解决方案,但是不幸的是,到目前为止我还没有找到它。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.