标签: env

为什么 pgrep 找不到通过 env 启动的脚本?

例如:

$ cat foo.sh
#!/usr/bin/env bash
while true; do sleep 1 ; done
$ ./foo.sh &
$ pgrep foo.sh
$
Run Code Online (Sandbox Code Playgroud)

对比:

$ cat bar.sh
#!/bin/bash
while true; do sleep 1 ; done
$ ./bar.sh &
$ pgrep bar.sh
21202
Run Code Online (Sandbox Code Playgroud)

由以下命令启动的进程env bash显示在输出中ps aux

terdon 4203  0.0  0.0  26676  6340 pts/3    S    17:23   0:00 /bin/bash
Run Code Online (Sandbox Code Playgroud)

而开头的/bin/bash显示为

terdon  9374  0.0  0.0  12828  1392 pts/3    S    17:27   0:00 /bin/bash ./bar.sh
Run Code Online (Sandbox Code Playgroud)

这可能解释了为什么它第一个没有被 捕获pgrep。所以,问题是:

  • 为什么调用时不显示脚本名称env
  • 是否 …

bash ps process-management env

5
推荐指数
1
解决办法
2843
查看次数

env --null 介绍

我试图在 的帮助下在 Python 进程中提取环境变量env --null,它甚至适用于包含换行符的环境变量。

但是在某些机器上我收到了一个错误:

> env -0
env: invalid option -- '0'

> env --null
env: unrecognized option '--null'

> env --version
env (GNU coreutils) 6.12
Copyright (C) 2008 Free Software Foundation, Inc.
Run Code Online (Sandbox Code Playgroud)

论证是在哪个版本中引入的?是否有任何替代命令来提取环境?

linux shell environment-variables env

5
推荐指数
1
解决办法
266
查看次数

新贵 - 加载 bashrc 变量

我想知道如何bashrc在新贵脚本中加载变量并运行(node.js在这种情况下是服务器)。

最好的方法是什么?

我试过这个:

exec sudo -u someuser $NODE_PATH $FULL_PATH/$FILE_NAME >> /var/log/$PROGRAM_NAME.sys.log 2>&1
Run Code Online (Sandbox Code Playgroud)

和这个

exec start-stop-daemon --start -c someuser --exec $NODE_PATH $FULL_PATH/$FILE_NAME >> /var/log/$PROGRAM_NAME.sys.log 2>&1
Run Code Online (Sandbox Code Playgroud)

但是在第一个选项中,节点应用程序无法读取http_proxy变量(在 中定义/etc/bash.bashrc)。在第二个中它无法读取配置文件(节点应用程序安装在/opt文件夹中)

upstart env bashrc

4
推荐指数
1
解决办法
3551
查看次数

/usr/bin/env: zsh -: 没有那个文件或目录

我收到错误

/usr/bin/env: zsh -: No such file or directory
Run Code Online (Sandbox Code Playgroud)

...当我运行以zsh以下shebang行开头的可执行脚本时:

#!/usr/bin/env zsh -
Run Code Online (Sandbox Code Playgroud)

此外,FWIW,替换---原因/usr/bin/env打印关于zsh --.

我只在 ubuntu 下看到过​​这个错误,而且只在 shebang hack 的上下文中看到过。在达尔文下,相同的脚本运行良好。在 ubuntu 下,运行

% /usr/bin/env zsh -
Run Code Online (Sandbox Code Playgroud)

从命令行成功。(实际上,“在 ubuntu 下”应该理解为“在 ubuntu 12.04 LTS 和env (GNU coreutils) 8.13”下的简写。)

我的问题是:如何修改上面的shebang以避免此错误?

当然,我知道删除尾随-会消除错误,但这不是一个可以接受的解决方案。这篇文章的其余部分解释了原因。

导致错误的 shebang 行是为了遵守两个完全独立的准则:

  1. 要使脚本可移植,请使用#!/usr/bin/env <cmd ...>而不是#!/path/to/cmd <...>.

  2. -作为唯一参数zsh在zsh的脚本横座板某类的家当线的攻击

所以,我可以更准确地重申我的问题如下:是否有可能同时满足这两个准则而不会在 ubuntu 下触发上面显示的错误?

scripting zsh env shebang

3
推荐指数
2
解决办法
2万
查看次数