Dash를 통해 명령 행 인수를 스크립트에 전달하려면 어떻게해야합니까? (14.04)


8

최근 Dash에 쉘 스크립트를 추가하는 방법에 대해이 질문을했습니다.

14.04에서 터미널을 열지 않고 작성한 bash 스크립트를 어떻게 실행합니까?

완벽하게 작동했습니다.

후속 질문 : Dash를 통해 명령 줄 인수를 어떻게 전달할 수 있습니까? 예 :이 경우 대시 명령의 이름은 "Panel"입니다. 스크립트는 8 개의 터미널로 화면을 표시합니다. 사용법의 예는 다음과 같습니다.

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

등등. Dash 와 같은 --left또는 --rightDash를 통해 인수를 전달하려면 어떻게해야 합니까? 이상적으로이 워크 플로를 갖고 싶습니다.

  • SUPER 키를 누릅니다
  • 유형 panel --left(예 :)
  • 대시가 사라지고 왼쪽이 패널로 표시됩니다.

지금은 올바른 스크립트를 실행하지만 무시합니다 --left.

팁?



1
@ RaduRădeanu : 감사합니다. 그러나 이것은 분명히 그 복제본이 아닙니다. 런처 프로그램에 옵션을 영구적으로 부착하는 방법을 알려줍니다. 원하는 경우 언제든지 여러 버전의 실행기를 사용하지 않고도 다른 옵션을 사용할 수 있기를 원합니다.
Sir Robert

5
왜 Alt + F2를 사용하지 않습니까? 아마도 더 쉬울 것입니다. 다른 옵션은 별도의 .desktop 파일을 만드는 것입니다.
Seth

1
... 또는 런처의 퀵리스트가있는 하나의 .desktop 파일
Jacob Vlijm

답변:


16

문제는 .desktopDash에서 인수를 사용 하여 파일을 "실행"할 수 없기 때문에 내가 생각 한대로 정확하게 설정 하는 것이 불가능하다는 것입니다. 그러나 스크립트 인수를 취 한다고 가정하면 몇 가지 우아한 대안 옵션이 있습니다.


  1. 스크립트를 저장하십시오 ~/bin

    • 확장을 제거
    • 그것을 실행 가능하게 만드십시오
    • 를 눌러 실행 AltF2하고 명령을 입력하십시오.

      <scriptname> <argument> 

  1. Unity 런처에서 퀵리스트를 생성합니다 :

    (에 스크립트를 저장하고 ~/bin실행 가능하게 만들고 1에서와 같이 확장명을 제거 했다고 가정합니다 .)

    여기에 이미지 설명을 입력하십시오

    [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;
    

    로 저장 panel.desktop에서 ~/.local/share/applications실행기에에 드래그.


  1. 예를 들어, 세 가지 다른 키보드 바로 가기를 만들 Alt+ <, Alt+ ^, Alt+는 >스크립트 + 인수를 실행합니다 :

    "시스템 설정"> "키보드"> "바로 가기"> "사용자 정의 바로 가기"

    "+"를 클릭하여 명령을 추가하십시오. <scriptname> <argument>


  1. 가장 명백한 것은 아니지만 옵션을 탐색하면서 언급해야합니다.

    여기에 이미지 설명을 입력하십시오

    옵션의 첫 문자를 입력하고 Return 키를 누르면 스크립트가 선택한 인수와 함께 실행됩니다.

    여기에 이미지 설명을 입력하십시오

    다시 스크립트를 ~ / bin에 저장했다고 가정하면 스크립트를 실행 가능하게 만들고 1에서와 같이 언어 확장을 제거하십시오.

    • 아래의 스크립트를 빈 파일에 복사하고로 저장 panel_options.sh하여 실행 파일로 만드십시오.

      #!/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
      
    • 아래 코드에서 .desktop 파일을 만듭니다. 에서 Icon=라인의에서, 당신의 아이콘으로 경로를 설정 Exec=경로 라인 pane_options.sh으로 저장, panel.desktop~/.local/share/applicatios

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

매우 철저한 답변. +1
Glutanimate

매우 철저한; 훌륭한 답변. 현상금 가치가 있습니다! 감사!
Sir Robert

0

원래 질문에서 스크립트를로 이동하는 것이 옳은 것처럼 보입니다 . 기본적으로 ~/bin/있어야합니다 $PATH.
이렇게하면 AltF2다시 사용하여 스크립트를 실행할 수 있습니다 . 쉘에서와 마찬가지로 인수를 전달할 수도 있습니다.

스크립트를 보관할 다른 폴더를에 추가 할 수도 있습니다 $PATH. 이렇게하려면 원하는 ~/.profile텍스트 편집기에서 엽니 다 .

# 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

마지막에 줄을 추가하고 ( <folder>폴더와 교체 ) 파일을 저장하십시오.

PATH="<folder>:$PATH"

예를 들어, 내가 추가 $HOME/.bin내에 $PATH내 홈 폴더를 혼란하지 않는 나의 바이너리,하지만 당신은 확실히 아무것도 위험 (예 : 세계 쓰기 가능)을 추가하지하는 경로에 디렉토리를 추가 할 수 있습니다.
변경 사항은 다음 로그인에 적용됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.