如何获取以前用于启动 shell 脚本的命令?
例如:
nohup /script_name.sh &
在脚本本身内部,如何检查“nohup”是否已被使用?
谢谢。
您想在脚本中使用 $_ 参数。
示例: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 [~]#
嗯,这取决于有问题的脚本。有很多方法可以执行脚本,例如:
./<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}}'
@codebaus 谢谢,做这样的事情是可行的,但使用 strace 绝对不行。
#!/bin/bash
# echo $_
# echo $0
if grep "sh" $_ >/dev/null ; then
exit 1
fi ;
echo "string" ;
我相信你想运行这个?:
#!/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) ---