bashスクリプトを実行すると$ 0とすべてのパラメータが消えるのはなぜですか(psに表示されます)?

bashスクリプトを実行すると$ 0とすべてのパラメータが消えるのはなぜですか(psに表示されます)?

bashスクリプト(最初の行#! /bin/bash)があり、do-dorunsbashコマンドラインから呼び出します。./do-doruns arg1 arg2 ...

このスクリプトは順番に scripts を呼び出し、./dorun a1 a2 a3 ...より多くのレベルのスクリプトがあり、コンパイルされたプログラムを呼び出します。

psとを使用すると、dorunその下で呼び出されるすべての実行中の項目にはpsその名前とコマンドライン引数が表示されます。たとえば、次のようになります。

/bin/bash /home/moss/path-to-dorun/dorun a1 a2 a3

など。ただし、どのdo-doruns線も表示されません。確かに実行中です(サブプロセスが完了するのを待っています)。なぜそうしたのか理解できます。議論消えることはありますが(別のテストでshiftbashを使用すると引数が消えないことがわかりましたがps)、その$0コマンド名は消えません。

これが私の作業に邪魔になるわけではありませんが、必ず知りたい奇妙なミステリーです。物事のバージョンは次のとおりです。

  • uname -a示す:Linux moss-Ubuntu-SMCSim 5.4.0-81-generic #91-Ubuntu SMP Thu Jul 15 19:09:17 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux

  • bash --version示す:GNU bash, version 5.0.17(1)-release (x86_64-pc-linux-gnu)

  • ps --version表示される内容(おそらく奇妙なことに):ps from procps-ng UNKNOWN

    この動作はこれに限定されず、よりps基本top的に見えるように表示されます。

  • 最後に、これが重要な場合は、これらすべてがVirtualBox仮想マシンで実行されていることです。

    vboxmanage --version示す:7.0.4r154605

ベストアンサー1

ps -Cこれはoptionsが使用するコマンド名を変更し、grepと一致する方法(使用するフラグによって異なります)を変更するため、スクリプトの最初の行がどのように見えるかによって異なります。

次のようなものを使用してください

#!/bin/bash

コマンド名をスクリプト名に変更するため、do-dorunと表示されます。

使用

#!/bin/env bash

これは、コマンド名がbashのままであることを意味します。

両方のコマンドラインは同じように見えます。例えば/bin/bash myscriptname.sh arg1 arg2 arg3

おすすめ記事