Chạy chương trình từ tập lệnh shell nhưng chỉ hoạt động như một tiến trình?


12

Có cách nào để tôi có thể thực thi một ứng dụng từ tập lệnh shell nhưng không tạo quy trình khác. Tôi muốn nó trông giống như một quá trình duy nhất . Việc kịch bản shell của tôi được thay thế bởi một quy trình mới không quan trọng hay liệu nó sẽ tiếp tục sau khi ứng dụng được gọi kết thúc.
Điều này cũng sẽ giải quyết câu hỏi trước đây của tôi: https://askubfox.com/questions/247632/is-there-a-way-to-associate-additable-application-launcher-with-an-app
Cảm ơn bạn rất nhiều vì sự giúp đỡ của bạn .

Câu trả lời:


7

Bạn có thể sử dụng execlệnh:

$ 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.

Thí dụ:

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

Như bạn có thể thấy, subshell được thay thế bởi echo.


Cảm ơn về câu trả lời của bạn. Tôi có thể chạy ví dụ: "exec -a firefox gedit &" và vì vậy gedit xuất hiện trong trình khởi chạy với tên Firefox. Nhưng nó không hoạt động cho phần lớn các ứng dụng.
zubozrout

Vấn đề có lẽ là ở chỗ, mặc dù tôi đã tạo ra một quy trình mới, nó sử dụng cả hai tên, tên gốc và tên mới được xác định. Đầu ra PS: 1000 6151 0,0 0,0 13720 944 điểm / 2 R + 10:49 0:00 grep --color = auto firefox | 10006153 0,0 0,0 13716 940 điểm / 2 S + 10:49 0:00 grep --color = auto gedit
zubozrout

Tôi có thể hỏi tại sao bạn sử dụng &vào cuối lệnh của bạn? Điều đó sẽ chạy lệnh trong một subshell, đó chính xác là những gì bạn không muốn.
Andrea Corbellini

Vâng, tôi chỉ đang thử nó trong thiết bị đầu cuối, không phải là một kịch bản shell.
zubozrout

2
Vì vậy, tôi đọc câu hỏi trước đó của bạn và có vẻ như bạn đang hiểu nhầm một số điều. Bạn đang nhầm lẫn quá trình với đối số zeroth với PID với trình khởi chạy dash . Và bạn cũng đang đặt câu hỏi sai. Điều bạn muốn hỏi đầu tiên là: trình khởi chạy liên kết dash với các tiến trình như thế nào? Khi bạn tìm thấy câu trả lời cho câu hỏi đó, bạn cũng sẽ tìm thấy câu trả lời cho câu hỏi ban đầu của mình.
Andrea Corbellini
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.