C プログラムで argv[0] と書くと、新しい名前が ps リストに表示されます。
どうすればbashでこれを行うことができますか?
経由で新しいプログラムを実行するときに実行できますexec -a <newname>
。
記録のために、元の投稿者の質問に正確に答えるわけではありませんが、これは簡単なことですzsh
:
ARGV0=emacs nethack
bash のソースを確認する機会がありましたが、argv[0] への書き込みがサポートされているようには見えません。
( exec -a foo bash -c 'echo $0' )
少なくとも一部の環境では、実行時にこれが可能でなければならないことを付け加えておきます。Linux の perl で $0 を割り当てると、ps に表示されるものが変わります。ただし、それがどのように実装されているかはわかりません。私が見つけることができれば、私はこれを更新します。
編集: perl がそれを行う方法に基づいて、それは自明ではありません。実行時にバスクが組み込まれているとは思えませんが、確かなことはわかりません。perl が実行時にプロセス名を設定する方法を確認できます。
bash 実行可能ファイルを別の名前にコピーします。
スクリプト自体でこれを行うことができます...
cp /bin/bash ./new-name
PATH=$PATH:.
exec new-name $0
シェル スクリプトではないふりをしようとしている場合は、スクリプト自体の名前をクールな名前に変更したり、" " (単一のスペース) に変更したりできます。
exec new-name " "
スクリプトを bash で実行し、ps リストに として表示されますnew-name
。
わかりましたので、スクリプト " " を呼び出すのは非常に悪い考えです :)
名義変更は基本的に
bash script
bash の名前を変更し、スクリプトの名前を変更します。
心配ならマクドゥームさん。どうやら、バイナリを新しい名前にコピーすることについて(これは完全に安全です)、シンボリックリンクを作成することもできます
ln -s /bin/bash ./MyFunkyName
./MyFunkyName
このように、symlink が ps リストに表示されます。(再度 PATH=$PATH:. を使用します。./ が必要ない場合)