2

以前にシェルスクリプトを開始するために使用されたコマンドを取得する方法は?

例えば:

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 を使用して script1 を正規表現 => /script2/ で解析します。

これを試して:

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