2

如何获取以前用于启动 shell 脚本的命令?

例如:

nohup /script_name.sh & 

在脚本本身内部,如何检查“nohup”是否已被使用?

谢谢。

4

4 回答 4

2

您想在脚本中使用 $_ 参数。

示例:shell.sh

#!/bin/bash
echo $_;

user@server [~]# sh shell.sh
/usr/bin/sh
user@server [~]#

此外:

如果您想摆脱该完整路径 - /usr/bin/sh - 使用 basename 命令。

#!/bin/bash
echo `basename $_`;

user@server [~]# sh shell.sh
sh
user@server [~]#
于 2013-03-28T13:22:31.073 回答
1

嗯,这取决于有问题的脚本。有很多方法可以执行脚本,例如:

 ./<scriptname> #chmod 700 <scriptname> should be done before executing this script
 bash <scriptname> # provided bash is used for executing the script.

或者如果您只想在 script1 中获取 script2 的名称,则使用 sed 或 awk 使用正则表达式 => /script2/ 解析 script1。

试试这个:

cat <script1> | awk '{ if( $0 ~ /^[^#].* \/scriptname.sh/ ){ print $1}}'
于 2013-03-28T12:54:02.967 回答
0

@codebaus 谢谢,做这样的事情是可行的,但使用 strace 绝对不行。

#!/bin/bash
# echo $_
# echo $0

if grep "sh" $_ >/dev/null ; then
exit 1
fi ;
echo "string" ;
于 2013-03-28T13:42:49.960 回答
0

我相信你想运行这个?:

#!/bin/bash
# echo $_
# echo $0

if grep "sh" $_ 2> /dev/null ; then
exit 1
fi ;
echo "string";

user@server [~]# sh shell.sh
Binary file /usr/bin/sh matches
user@server [~]#

不确定您在最终游戏中要完成什么。但是 $_ 应该根据您最初的问题为您提供所需的内容。

此外:

由于我没有回答您的 strace 评论,因此很抱歉。基于上面前面的代码。

strace sh shell.sh

wait4(-1, Binary file /usr/bin/strace matches
[{WIFEXITED(s) && WEXITSTATUS(s) == 0}], 0, NULL) = 874
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
--- SIGCHLD (Child exited) @ 0 (0) ---
于 2013-03-28T13:57:54.050 回答