如何通过Dash将命令行参数传递给脚本?(14.04)


8

我最近问了有关向Dash添加shell脚本的问题:

在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通过Dash的参数?理想情况下,我想拥有以下工作流程:

  • 按超级键
  • 类型panel --left(例如)
  • 破折号消失,左侧被镶板。

现在,它运行正确的脚本,但忽略--left

提示?



1
@RaduRădeanu:谢谢,但这绝对不是重复的。这说明了如何将选项永久地附加到启动程序。我希望能够在需要时使用不同的选项(不具有多个版本的启动器)。
罗伯特爵士2014年

5
为什么不只使用Alt + F2?这很可能会更容易。另一个选择是创建单独的.desktop文件..
赛斯

1
...或一个带有启动器快速列表的.desktop文件。
2014年

Answers:


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+ >以运行脚本+参数:

    “系统设置”>“键盘”>“快捷方式”>“自定义快捷方式”

    单击“ +”添加命令: <scriptname> <argument>


  1. 并不是最明显的一个,但是在探讨选项时,应该提到:您可以从Dash调用一个(zenity)选项列表:

    在此处输入图片说明

    输入您的选项的第一个字符,按回车键,您的脚本将使用选定的参数运行。

    在此处输入图片说明

    再次假设您将脚本保存在〜/ 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 2014年

很彻底 极好的答案。值得赏金!谢谢!
罗伯特爵士2014年

0

从最初的问题来看,似乎正确的做法是将脚本移至~/bin/$PATH默认情况下该脚本应位于您的目录中。
如果执行此操作,则可以AltF2再次使用运行脚本。您还可以像在shell中一样向其传递参数。

您还可以将保存脚本的任何其他文件夹添加到$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二进制文件中,这样我的二进制文件就不会混乱我的主文件夹,但是您可以在路径中添加任何目录,只是要确保不要添加任何危险的东西(例如,可写世界)。
更改将在下一次登录时生效。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.