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

等々。ダッシュのように、--leftまたは--rightダッシュを介して引数を渡すにはどうすればよいですか?理想的には、このワークフローが欲しいです:

  • SUPERキーを押す
  • タイプpanel --left(例)
  • ダッシュが消え、左側が羽目板になります。

現在は適切なスクリプトを実行し--leftますが、は無視します。

チップ?



1
@RaduRădeanu:ありがとう、しかしこれは間違いなくその複製ではありません。これは、ランチャープログラムにオプションを永続的に添付する方法を示しています。ランチャーの複数のバージョンがなくても、いつでもさまざまなオプションを使用できるようにしたい。
ロバート卿

5
Alt + F2を使用しないのはなぜですか?それはおそらく容易になるだろう。..別のオプションは、個別の.desktopファイル..作成だろう
セス

1
...またはランチャーのクイックリストを含む1つの.desktopファイル。
Jacob Vlijm 2014年

回答:


16

問題は、.desktop引数を指定してDashからファイルを「実行」できないことです。そのため、思い描いたとおりの設定は不可能です。ただし、スクリプト引数をとる場合、エレガントな代替オプションがいくつかあります。


  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+ などの3つの異なるキーボードショートカットを作成します>

    「システム設定」>「キーボード」>「ショートカット」>「カスタムショートカット」

    「+」をクリックしてコマンドを追加します。 <scriptname> <argument>


  1. 最も明白なものではありませんが、オプションを探索する場合は、言及する必要があります。Dashから(zenity)オプションリストを呼び出すことができます。

    ここに画像の説明を入力してください

    オプションの最初の文字を入力して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
2014年

非常に徹底的。すばらしい答え。賞金に値する!ありがとう!
ロバート卿

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.