在OSX

时间:2018-02-06 11:04:01

标签: bash macos terminal

我以当前用户身份运行bash python命令:

su $USER -c 'python3 -m site --user-site'

这样可以正常工作并打印以下内容:

/Users/standarduser7/Library/Python/3.6/lib/python/site-packages

我想将此输出分配给变量,因此我使用"$(command)"

target="$(su $USER -c 'python3 -m site --user-site')"

此时,OSX终端挂起并且必须被杀死。使用反引号代替"$(command)"会导致相同的结果。

但是,如果我在没有用户的情况下运行该命令,则一切正常: target="$(python3 -m site --user-site)" echo target

输出:/Users/standarduser7/Library/Python/3.6/lib/python/site-packages

如何将作为当前用户运行的命令的输出分配给变量?

1 个答案:

答案 0 :(得分:0)

我认为它没有悬挂;我认为它显示了一个空白(无提示)命令行并正在等待输入。当我输入用户密码时,它会返回以下结果:

Password:/Users/CK/Library/Python/2.7/lib/python/site-packages

这就是最终存储在target变量中的内容。快速参数替换可以纠正这种异常输出:

target=${target#*:}

另一个解决方案(归功于this答案)是创建一个文件描述符作为stdout的副本,然后tee该副本的命令,然后允许{{ 1}}通过管道传递到stdout以处理输出:

grep