标签: posix

`/proc/$PID/cwd`:是否有 POSIX 等价物?

Linux 有一个/proc目录和文件系统,据我所知,它不是 POSIX 的一部分。在每个/proc/$PID子目录中,是一个符号链接,cwd指向该PID进程的实际工作目录(该cwd链接始终是最新的)。

这个符号链接对于某些用例很方便,比如使用不同的 shell 和在两个 shell 之间交换文件(正式地,它们的工作目录)。

有没有一种简单的方法来获得类似的东西,只使用 POSIX 功能?

更多关于这个问题

发表评论后,更精确:它不一定是链接和环境变量 lile $<PID>_CWD,也一样好,虽然乍一看,我不相信这样的解决方案存在。它必须易于引用(例如符号链接或环境变量),并且每次其他进程切换其工作目录时始终保持最新。

解决方案不一定是POSIX,最重要的是可移植性,但POSIX肯定是一种保证。

shell ipc posix cwd

8
推荐指数
2
解决办法
2393
查看次数

stdin 重定向的 posix 位置(&lt;in cmd vs cmd &lt;in)

我总是在命令之后写 stdin 重定向,因为对我来说,首先命令然后重定向(如果有)更自然:

some-command < input-file > output-file
Run Code Online (Sandbox Code Playgroud)

多年来,我看到人们在命令之前编写 stdin 重定向,以获得一些流程方向:

< input-file some-command > output-file (or without spaces after < and > )
Run Code Online (Sandbox Code Playgroud)

这个顺序是被 POSIX 接受还是被许多 shell 接受(在我的 Fedora 21 中,它被bash, dash, tcsh,ksh和接受zsh)?

shell io-redirection posix

8
推荐指数
1
解决办法
442
查看次数

变量分配影响当前运行的 shell

在编写一些代码时,我发现这一行:

$ TZ="America/Los_Angeles"       date; echo "$TZ"
Thu Dec 24 14:39:15 PST 2015
Run Code Online (Sandbox Code Playgroud)

正确给出“洛杉矶”的实际时间,并且TZ不保留变量的值。一切都在意料之中。

但是,使用这一行,我曾经扩展了一些格式,并且基本上执行了相同的操作,保留了 TZ 的值:

TZ="America/Los_Angeles" eval  date; echo "$TZ"
Thu Dec 24 14:41:34 PST 2015
America/Los_Angeles
Run Code Online (Sandbox Code Playgroud)

经过多次测试,我发现这种情况只发生在某些 shell 中。它发生在 dash、ksh 中,但不发生在 bash 或 zsh 中。

问的

问题是:

  • 为什么现在的shell中还保留了TZ的值?
  • 如何避免/控制(如果可能)?

额外的。

我用这两行在几个 shell 中运行了测试:

myTZ="America/Los_Angeles"
unset TZ; { TZ="$myTZ"      date; } >/dev/null; echo -n "  direct $TZ"
unset TZ; { TZ="$myTZ" eval date; } >/dev/null; echo    "  evaled $TZ"
Run Code Online (Sandbox Code Playgroud)

结果如下:

/bin/ash        :   direct   evaled America/Los_Angeles
/bin/dash       : …
Run Code Online (Sandbox Code Playgroud)

shell environment-variables posix

8
推荐指数
2
解决办法
415
查看次数

在 POSIX sed 中,句点(点)是否与多行模式空间中的换行符匹配?

在 GNU sed 中它有效。例如,这匹配多行模式空间中的两个空行(使用创建N

/^\n$/
Run Code Online (Sandbox Code Playgroud)

这是标准吗?

sed text-processing posix regular-expression

8
推荐指数
1
解决办法
1495
查看次数

如何获取特定文件的文件系统信息?

找出有关文件的文件系统信息的最佳方法是什么。

例如,如果我有一个文件

/media/xyz/path/to/file.ext
Run Code Online (Sandbox Code Playgroud)

/etc/fstab包含

//server1/Share1 /media/xyz cifs option1=value1,...
Run Code Online (Sandbox Code Playgroud)

我如何确定文件是否在 Samba 共享上,它具有本地路径/path/to/file.ext以及文件系统安装的选项?

正在解析mount便携式解决方案的输出吗?还是解析findmnt?是否有符合 POSIX 标准的方法来实现这一目标?

mount posix

8
推荐指数
1
解决办法
243
查看次数

UNIX 标准是否需要区分大小写的文件系统?

一个答案这个问题提到了OSX的UNIX 03认证。现在 AFAIK OSX 的标准文件系统是/曾经是HFS,它“保存了创建或重命名但在操作中不区分大小写的文件的情况”(即它保留大小写不区分大小写)。

UNIX 认证或 POSIX 是否需要区分大小写的文件系统?

filesystems standard posix case-sensitivity

8
推荐指数
1
解决办法
1571
查看次数

测试变量是否包含换行符 (POSIX)

我知道有些 shell 接受这种测试:

t() { [[ $var == *$'\n'* ]] && res=yes || res=no
      printf '%s ' "$res";
    }

var='ab
cd'
t
var='abcd'
t
echo
Run Code Online (Sandbox Code Playgroud)

执行时:

$ bash ./script
yes no
Run Code Online (Sandbox Code Playgroud)
  1. 什么是 POSIX(破折号)工作等效项

  2. 以下是可靠的测试方法吗?

    nl='
    '
    
    t() {  case "$var" in
               *$nl* ) res=yes ;;
               * ) res=no ;;
           esac
           printf '%s ' "$res"
         }
    
    var='ab
    cd'
    t
    var='abcd'
    t
    echo
    
    Run Code Online (Sandbox Code Playgroud)

shell dash string posix newlines

8
推荐指数
2
解决办法
2550
查看次数

POSIX 是否标准化了文件描述符编号?

POSIX 是否要求stdin0、1stdoutstderr2 或者这只是一个约定?其他系统是否与该约定不同,或者这是一个安全的假设?

c standard file-descriptors posix

8
推荐指数
1
解决办法
2064
查看次数

在 awk 代码块或函数中允许用 NF 做什么?

参考:实用程序的 POSIX 标准awk

我真正想念的一件事awk是使用分隔符连接数组的能力,就像joinPerl 中的命令一样,通常用于立即输出。

相反,我最终编写了类似的代码

for (key in array)
    joined_string = (joined_string ==  "" ? array[key] : joined_string "," array[key])

print joined_string
Run Code Online (Sandbox Code Playgroud)

或者

joined_string = array[1]
for (i = 2; i <= length(array); ++i)
    joined_string = joined_string "," array[i];

print joined_string
Run Code Online (Sandbox Code Playgroud)

但是,awk如果我更改当前字段,可能会为我执行此操作:

OFS="," # (would probably do this in BEGIN)

n = 0
for (key in array)
    $(++n) = array[key]

print
Run Code Online (Sandbox Code Playgroud)

我相信这是完全合法的。但是,如果当前输入记录的字段多于array数组的条目(“垃圾”将是来自输入文件的数据),这将在输出中产生垃圾。因此,能够做到这一点会很好

OFS = "," # (would …
Run Code Online (Sandbox Code Playgroud)

awk posix

8
推荐指数
1
解决办法
769
查看次数

bc:POSIX 是否禁止独立使用关系运算符?

我想将两个数字与bc. 根据StackOverflow 上这个高度评价的答案,我可以这样做:

printf '%s\n' '1.2 > 0.4' | bc
Run Code Online (Sandbox Code Playgroud)

bc发送1到 STDOUT,表明该语句为真(如果该语句为假,它将返回 0)。

根据 POSIX 页面bc

与所有其他运算符不同,关系运算符( '<', '>', "<=", ">=", "==", "!=" )仅作为 if、while、或在 for 语句中。

也许我误解了,但是这种语言似乎不允许使用上面示例中使用的语法。

单独使用关系运算符是否bc违反 POSIX?如果是这样,我应该如何重写我的例子?

posix bc

8
推荐指数
1
解决办法
650
查看次数