シェルスクリプトからプログラムを実行しますが、1つのプロセスとしてのみ動作しますか?


12

シェルスクリプトからアプリケーションを実行できるが、別のプロセスを作成できない方法はありますか。1つのプロセスだけのように見せたい。シェルスクリプトが新しいプロセスに置き換えられるかどうか、または呼び出されたアプリケーションが終了した後も続行されるかどうかは関係ありません。
これは私の以前の質問も解決するはず です:https : //askubuntu.com/questions/247632/is-there-a-way-to-associate-additional-application-launcher-with-an-app
どうもありがとう。

回答:


7

exec次のコマンドを使用できます。

$ help exec
exec: exec [-cl] [-a name] [command [arguments ...]] [redirection ...]
    Replace the shell with the given command.

    Execute COMMAND, replacing this shell with the specified program.
    ARGUMENTS become the arguments to COMMAND.  If COMMAND is not specified,
    any redirections take effect in the current shell.

    Options:
      -a name   pass NAME as the zeroth argument to COMMAND
      -c        execute COMMAND with an empty environment
      -l        place a dash in the zeroth argument to COMMAND

    If the command cannot be executed, a non-interactive shell exits, unless
    the shell option `execfail' is set.

    Exit Status:
    Returns success unless COMMAND is not found or a redirection error occurs.

例:

user@host:~$ PS1="supershell$ "
supershell$ bash
user@host:~$ PS1="subshell$ "
subshell$ exec echo hello
hello
supershell$ 

ご覧のとおり、サブシェルはに置き換えられechoます。


ご回答ありがとうございます。たとえば、「exec -a firefox gedit&」を実行すると、geditがランチャーにFirefoxとして表示されます。ただし、ほとんどのアプリでは機能しません。
zubozrout

問題は、おそらく、新しいプロセスを作成したが、元の名前と新しく定義された名前の両方を使用するという事実にあります。PS出力:1000 6151 0.0 0.0 13720 944 pts / 2 R + 10:49 0:00 grep --color = auto firefox | 10006153 0.0 0.0 13716 940 pts / 2 S + 10:49 0:00 grep --color = auto gedit
zubozrout

なぜあなた&はあなたの命令の最後に使用しているのかと尋ねてもいいですか?これにより、サブシェルでコマンドが実行されますが、これはまったく望ましくありません。
アンドレアコルベリーニ

はい、シェルスクリプトではなく、ターミナルで試しました。
zubozrout

2
だから、私はあなたの前の質問を読みましたが、あなたはいくつかのことを誤解しているようです。あなたはダッシュランチャーPID0番目の引数を持つプロセスを混同しています。そして、あなたも間違った質問をしている。あなたが最初に尋ねたいのは、ダッシュがどのようにランチャーをプロセスに関連付けるかです。その質問への回答が見つかると、元の質問への回答も見つかります。
アンドレアコルベリーニ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.