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

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

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

在 14.04 中,如何在不打开终端的情况下运行我编写的 bash 脚本?

它运行得非常好。

后续问题:如何通过 Dash 传递命令行参数?示例:在本例中,我的 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或 )--right?理想情况下,我希望有以下工作流程:

  • 按 SUPER 键
  • 类型panel --left(例如)
  • 破折号消失并且左侧被镶板。

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

尖端?

答案1

问题是你不能.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
      

答案2

从你最初的问题来看,正确的做法似乎是将脚本移至~/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这样我的二进制文件就不会弄乱我的主文件夹,但你可以将任何目录添加到你的路径中,只要确保不要添加任何危险的内容(例如,全球可写的内容)。
更改将在下次登录时生效。

相关内容