我以当前用户身份运行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
如何将作为当前用户运行的命令的输出分配给变量?
答案 0 :(得分:0)
我认为它没有悬挂;我认为它显示了一个空白(无提示)命令行并正在等待输入。当我输入用户密码时,它会返回以下结果:
Password:/Users/CK/Library/Python/2.7/lib/python/site-packages
这就是最终存储在target
变量中的内容。快速参数替换可以纠正这种异常输出:
target=${target#*:}
另一个解决方案(归功于this答案)是创建一个文件描述符作为stdout
的副本,然后tee
该副本的命令,然后允许{{ 1}}通过管道传递到stdout
以处理输出:
grep