以前にシェルスクリプトを開始するために使用されたコマンドを取得する方法は?
例えば:
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 を使用して script1 を正規表現 => /script2/ で解析します。
これを試して:
cat <script1> | awk '{ if( $0 ~ /^[^#].* \/scriptname.sh/ ){ print $1}}'
これを実行したいと思いますか?:
#!/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) ---
@codebausのおかげで、このようなことをすることはうまくいきますが、straceを使うことは間違いありません。
#!/bin/bash
# echo $_
# echo $0
if grep "sh" $_ >/dev/null ; then
exit 1
fi ;
echo "string" ;