获取用于启动脚本的命令

时间:2013-03-28 12:37:01

标签: shell get command

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

例如:

nohup /script_name.sh & 

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

感谢。

4 个答案:

答案 0 :(得分: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 [~]#

答案 1 :(得分: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解析script1 with regular expression =&gt; / SCRIPT2 /.

试试这个:

cat <script1> | awk '{ if( $0 ~ /^[^#].* \/scriptname.sh/ ){ print $1}}'

答案 2 :(得分:0)

@codebaus谢谢,做这样的事情有效,但绝对不能使用strace。

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

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

答案 3 :(得分: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 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) ---