Làm cách nào tôi có thể chuyển đối số dòng lệnh cho tập lệnh thông qua Dash? (14.04)


8

Gần đây tôi đã hỏi câu hỏi này về việc thêm tập lệnh shell vào Dash:

Trong 14.04, làm cách nào để chạy tập lệnh bash tôi đã viết mà không mở terminal?

Nó hoạt động hoàn hảo.

Câu hỏi tiếp theo: Làm cách nào tôi có thể chuyển các đối số dòng lệnh thông qua Dash? Ví dụ: Trong trường hợp này, lệnh dash của tôi được đặt tên là "Bảng điều khiển". Kịch bản bảng điều khiển màn hình của tôi với 8 thiết bị đầu cuối. Đây là một ví dụ về việc sử dụng:

panel             # Tile the screen with 8 terminal windows.
panel --left      # Tile the left side with 4 terminals
panel --right     # Tile the right side with 4 terminals

Và như thế. Làm cách nào tôi có thể chuyển các đối số như --lefthoặc --rightthông qua Dash? Lý tưởng nhất là tôi muốn có quy trình làm việc này:

  • Nhấn phím SUPER
  • Nhập panel --left(ví dụ)
  • Dash đi xa và phía bên trái được panen.

Ngay bây giờ nó chạy đúng kịch bản, nhưng bỏ qua --left.

Lời khuyên?



1
@ RaduRădeanu: Cảm ơn, nhưng đây chắc chắn không phải là bản sao của điều đó. Điều đó cho biết làm thế nào để gắn vĩnh viễn các tùy chọn vào một chương trình launcher. Tôi muốn có thể sử dụng các tùy chọn khác nhau bất cứ khi nào tôi muốn (không có nhiều phiên bản trình khởi chạy).
Ngài Robert

5
Tại sao không chỉ sử dụng Alt + F2? Điều đó có thể dễ dàng hơn .. Một tùy chọn khác sẽ tạo các tệp .desktop riêng biệt ..
Seth

1
... hoặc một tệp .desktop có danh sách nhanh từ trình khởi chạy.
Jacob Vlijm

Câu trả lời:


16

Vấn đề là bạn không thể "chạy" một .desktoptệp từ Dash bằng các đối số, vì vậy thiết lập chính xác như bạn nghĩ là không thể. Tuy nhiên, giả sử tập lệnh của bạn không có đối số, có một vài tùy chọn thay thế thanh lịch, thậm chí có thể tốt hơn:


  1. Lưu tập lệnh của bạn vào ~/bin

    • xóa phần mở rộng
    • làm cho nó thực thi
    • chạy nó bằng cách nhấn AltF2, gõ lệnh

      <scriptname> <argument> 

  1. Tạo danh sách nhanh trong trình khởi chạy Unity:

    (giả sử bạn đã lưu tập lệnh vào ~/bin, làm cho nó có thể thực thi được và xóa phần mở rộng như trong 1.)

    nhập mô tả hình ảnh ở đây

    [Desktop Entry]
    Name=name_of_your_script_like_you_see_it_in_Dash
    Exec=<scriptname> <default_argument>
    Icon=/path/to/some/icon
    Type=Application
    
    Actions=Panel;Panel -left;Panel -right;
    
    [Desktop Action Panel]
    Name=Panel
    Exec=<scriptname> <default_argument>
    OnlyShowIn=Unity;
    
    [Desktop Action Panel -left]
    Name=Panel -left
    Exec=<scriptname> <argument_1>
    OnlyShowIn=Unity;
    
    [Desktop Action Panel -left]
    Name=Panel -right
    Exec=<scriptname> <argument_2>
    OnlyShowIn=Unity;

    Lưu nó như panel.desktoptrong ~/.local/share/applicationsvà kéo nó vào launcher.


  1. Tạo ba phím tắt khác nhau, ví dụ Alt+ <, Alt+ ^, Alt+ >để chạy tập lệnh + đối số của bạn:

    "Cài đặt hệ thống"> "Bàn phím"> "Phím tắt"> "Phím tắt tùy chỉnh"

    Nhấp vào "+" để thêm các lệnh của bạn: <scriptname> <argument>


  1. Không phải là một trong những rõ ràng nhất, nhưng khám phá các tùy chọn, nó nên được đề cập: bạn có thể gọi một danh sách tùy chọn (zenity) từ Dash:

    nhập mô tả hình ảnh ở đây

    Nhập ký tự đầu tiên của tùy chọn của bạn, nhấn return và tập lệnh của bạn sẽ chạy với đối số đã chọn.

    nhập mô tả hình ảnh ở đây

    Một lần nữa giả sử rằng bạn đã lưu tập lệnh trong ~ / bin, làm cho nó có thể thực thi được và xóa phần mở rộng ngôn ngữ như trong 1.:

    • Sao chép tập lệnh bên dưới vào một tập tin trống, lưu nó dưới dạng panel_options.sh, làm cho nó thực thi được.

      #!/bin/bash
      
      test=$(zenity --list "1. Panel" "2. Panel -left" "3. Panel -right" --column="Panel options" --title="Panel")
      
      if [[ "$test" = "1. Panel"* ]]; then
          <scriptname> <default_argument>
      elif [[ "$test" = "2. Panel -left"* ]]; then
          <scriptname> <argument_1>
      elif [[ "$test" = "3. Panel -right"* ]]; then
          <scriptname> <argument_2>
      fi
    • Tạo tệp .desktop từ mã bên dưới. Trong Icon=dòng, đặt đường dẫn đến biểu tượng của bạn, trong Exec=dòng đường dẫn đến pane_options.sh, lưu nó như panel.desktoptrong~/.local/share/applicatios

      [Desktop Entry]
      Name=Panel
      Exec=/path/to/panel_options.sh
      Icon=/path/to/some/icon
      Type=Application
      StartupWMClass=Zenity

Câu trả lời rất kỹ lưỡng. +1
Glutimate

Rất kỹ lưỡng; câu trả lời tuyệt vời. Đáng tiền thưởng! Cảm ơn!
Ngài Robert

0

Từ câu hỏi ban đầu của bạn, có vẻ như điều đúng đắn cần làm là di chuyển tập lệnh sang ~/bin/, $PATHtheo mặc định là trong tập lệnh của bạn .
Nếu bạn làm điều này, bạn sẽ có thể chạy lại tập lệnh của mình AltF2. Bạn cũng sẽ có thể truyền các đối số cho nó giống như bạn làm trong trình bao.

Bạn cũng có thể thêm bất kỳ thư mục nào khác nơi bạn giữ tập lệnh của mình $PATH. Để làm điều này, hãy mở ~/.profiletrong trình soạn thảo văn bản bạn chọn:

# This file is not read by bash(1), if ~/.bash_profile or ~/.bash_login
# exists.
# see /usr/share/doc/bash/examples/startup-files for examples.
# the files are located in the bash-doc package.

# the default umask is set in /etc/profile; for setting the umask
# for ssh logins, install and configure the libpam-umask package.
#umask 022

# if running bash
if [ -n "$BASH_VERSION" ]; then
    # include .bashrc if it exists
    if [ -f "$HOME/.bashrc" ]; then
        . "$HOME/.bashrc"
    fi
fi

# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
    PATH="$HOME/bin:$PATH"
fi

Cuối cùng, thêm một dòng (thay thế <folder>bằng thư mục của bạn) và lưu tệp:

PATH="<folder>:$PATH"

Ví dụ: tôi thêm $HOME/.binvào các $PATHtệp nhị phân của mình để không làm lộn xộn thư mục nhà của tôi, nhưng bạn có thể thêm bất kỳ thư mục nào vào đường dẫn của mình để đảm bảo không thêm bất cứ điều gì nguy hiểm (ví dụ như có thể ghi trên thế giới).
Các thay đổi sẽ có hiệu lực vào lần đăng nhập tiếp theo.

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.