如何获取以前用于启动shell脚本的命令?
例如:
nohup /script_name.sh &
在脚本本身内部,如何检查是否使用了“nohup”?
感谢。
答案 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) ---