Python 从bash启动脚本并指导输出
关于从bash脚本中启动脚本,我有一个关于bash语法的问题 我的问题是:Python 从bash启动脚本并指导输出,python,linux,bash,Python,Linux,Bash,关于从bash脚本中启动脚本,我有一个关于bash语法的问题 我的问题是: 我看到了以下语法: #!/bin/bash python do_something.py > /dev/null 2>&1 & 你能解释一下什么是指向/dev/null,如果前面已经提到/dev/null,那么2>&1的含义是什么吗 此外,如果我有一行定义如下: python do_something.py > 2>&1 & 这有什么不同 如果在许多路径中有相同
#!/bin/bash
python do_something.py > /dev/null 2>&1 &
你能解释一下什么是指向/dev/null
,如果前面已经提到/dev/null
,那么2>&1
的含义是什么吗python do_something.py > 2>&1 &
这有什么不同ps-ef | grep python
之后,如何区分每个进程。
当我这样做的时候,我会得到一个进程列表,这些进程都被称为do_something.py
,如果我能拥有每个pid的完整执行路径字符串就好了;我该怎么做- 1> 文件名:将标准输出重定向到文件“filename”
- 1> >文件名:重定向并将标准输出附加到文件“filename”
- 2> 文件名:将stderr重定向到文件“filename”
- 2> >文件名:重定向stderr并将其附加到文件“filename”中
- &>文件名:将stdout和stderr重定向到文件“filename”
将执行命令(在您的示例中是python do_something.py
)后在stdout
中打印的内容重定向到名为/dev/null
的文件。/dev/null
有点像黑洞。无论你给它写什么,它都会消失
2>&1
将stderr
(其fd为2)的输出重定向到stdout
(其fd为1)
有关重定向的更多信息,请参阅
有关
/dev/null好的,diclaimer的更多信息,请参阅链接:我现在没有访问bash的权限,因此可能是我错了
让我们中断您的命令:python do_something.py>/dev/null 2>&1&
python do\u something.py
将运行您的命令
/dev/null
将标准输出重定向到/dev/null
2>&1
将把stderr重定向到stdout
&
将分叉您的进程并在后台运行
因此,您的命令将忽略stdout/stderr,并在后台运行
相当于命令python do\u something.py>&/dev/null&
python do\u something.py>2>&1&
:
>2
将标准输出重定向到名为2的文件
&1
将标准输出重定向到标准输出(是标准输出到标准输出)
&
将分叉您的进程并在后台运行
因此,这个命令几乎相当于python do\u something.py>2&
,
它会将输出重定向到名为2的文件(例如:echo'yes'>2>&1
)
注意:可能未指定&1
的行为
由于您已经使用和运行了命令,因此您的命令将是fork和
在后台运行,因此我不知道有什么方法可以在后台运行
案例您仍然可以查找/proc
目录[3]以查看
您的命令已在哪个目录下运行
[1]:
[2]:
[3]:ls-l/proc/$PROCCESSID/cwd
查看..对于(2),运行:>2>&1&
会生成-bash:unexpected token'2'附近的语法错误
-它被视为无效,因为
重定向没有文件名。那不是我所期望的;我想文件名应该是2>&1
象形文字。(假设参数和I/O重定向成功,:
是一个标准的shell(内置)命令,它不会成功执行任何操作。)您尚未解释2>&1
符号。您可以包括URL引用,例如[I/O重定向](https://www.gnu.org/software/bash/manual/bash.html#Redirections)
显示为@user6775110:您能否解释表达式中每个&的角色:python do\u something.py>&/dev/null&