如何在不输入完整路径的情况下运行脚本?

Poo*_*ick 62 command-line bash scripts

我想知道是否有办法在不输入完整路径的情况下运行程序/shell 脚本:

/opt/idea/bin/idea.sh
Run Code Online (Sandbox Code Playgroud)

c0r*_*0rp 70

您可以创建symlink。在/usr/local/bin. 您只需要运行命令:

sudo ln -s /full/path/to/your/file /usr/local/bin/name_of_new_command
Run Code Online (Sandbox Code Playgroud)

之后,您应该制作file可执行文件:

chmod +x /full/path/to/your/file
Run Code Online (Sandbox Code Playgroud)

现在您应该可以name_of_new_command随时在终端中运行了。

请注意,这仅适用于 Linux 的家庭使用。

  • 请注意,您不应在 `/usr/local/bin` 中放置一个符号链接,该符号链接指向私有主文件夹中的脚本,例如 `/home/jack/myscript.sh`,因为通常只有用户 `jack`能够执行它。符号链接对其他用户可见,但对它指向的文件不可见。在单用户系统上,这可能无关紧要,但是,将*所有* 用户可以在`/usr/local/bin` 中读取的脚本(或指向脚本的链接)和私有、自- 在他们的`~/bin` 文件夹中制作单个用户的脚本(或脚本链接)。 (13认同)

jan*_*nos 32

您可以添加/opt/idea/bin到您的PATH变量:

PATH=/opt/idea/bin:"$PATH"
Run Code Online (Sandbox Code Playgroud)

在此之后,您可以简单地运行它idea.sh

您可能想在~/.bashrc文件中添加这一行。

  • 另外:如果您使脚本可执行,则可以不使用 .sh 扩展名(假设您使用脚本顶部的 shebang)。那么简单的“想法”就足够了。 (2认同)
  • @JonathanCallen Callen 你当然可以!使脚本可执行,从文件名和运行它的命令中删除 .sh 扩展名,因为您使用 shebang #!/bin/bash 启动脚本。 (2认同)
  • 谢谢@Jacob,注意它说*“当脚本安装到系统路径中的目录中时”*。`idea.sh` 脚本不是这样的脚本,实际上完全不支持将它移到安装目录之外。Debian 打包规则不适用于此处。 (2认同)

mur*_*uru 15

您可以在您的~/.bashrc

some-name () {
    /path/to/your/file
    # or:
    #cd /path/to/your
    #./path
}
Run Code Online (Sandbox Code Playgroud)

或者您可以创建一个alias

alias some-name='/path/to/your/file'
# or  
#alias some-name='cd /path/to/your/; ./file'
Run Code Online (Sandbox Code Playgroud)

在这两种情况下,您都可以通过调用来运行它:

$ some-name
Run Code Online (Sandbox Code Playgroud)

如果文件不依赖于它的运行位置,请考虑将其添加到您的~/bin:

mkdir -p ~/bin
cp /path/to/you/file ~/bin
# or mv /path/to/you/file ~/bin
# or ln -s /path/to/you/file ~/bin
Run Code Online (Sandbox Code Playgroud)

~/bin,如果存在,会$PATH自动添加到您的。然后你直接调用file

$ file
Run Code Online (Sandbox Code Playgroud)

(尽管名称选择不当,请考虑将其称为不那么通用的名称。)

  • +1 特别是对于将 `file` 添加到你的 `~/bin` 的解决方案,这是我通常做的(对于更长的脚本)。我什至可能会把那个放在顶部 :) 别名对于带有某些参数的命令的快捷方式很有用,例如,`alias l='ls -CF'`。[虽然我见过更棒的别名用法](http://simpletondigest.wordpress.com/2012/01/06/building-a-better-macro/)。我不倾向于在`~/.bashrc` 中声明函数(我更喜欢将所有脚本组织在`~/bin` 中的单独文件中)。虽然这一切都是品味问题,但我想:) (2认同)

g_p*_*g_p 10

您可以使用以下命令创建启动器:

gnome-desktop-item-edit --create-new <path-where-to-save>. 我会打开这个窗口。

在此处输入图片说明

随意命名它,然后在命令框中键入以下内容

sh -c '/opt/idea/bin/idea.sh' 并保存它。

现在您可以使用新创建的启动器运行该文件

或者

您可以创建一个包含以下内容的 .desktop 文件

[Desktop Entry]
Name=<whatever-you-want>
Exec=sh -c '/opt/idea/bin/idea.sh'     
Terminal=false
Type=Application
Icon='<path to an icon file if you want>'
Run Code Online (Sandbox Code Playgroud)

现在将其.desktop扩展名保存在任何地方。

使用此命令使其可执行 chmod a+x <your-desktop-file>

现在双击打开它。


Avi*_*Raj 7

我们也可以/opt/idea/bin/idea.sh直接使用运行文件bash_aliases

~/.bashrc通过运行打开文件,

gedit ~/.bashrc
Run Code Online (Sandbox Code Playgroud)

删除#前面的行并保存它,这样行看起来像,

if [ -f ~/.bash_aliases ]; then
    . ~/.bash_aliases
fi
Run Code Online (Sandbox Code Playgroud)

现在打开~/.bash_aliases文件,

gedit ~/.bash_aliases
Run Code Online (Sandbox Code Playgroud)

在该文件中添加以下几行并保存,

alias idea='cd /opt/idea/bin && sudo ./idea.sh'
Run Code Online (Sandbox Code Playgroud)

最后获取~/.bashrc文件,

source ~/.bashrc
Run Code Online (Sandbox Code Playgroud)

现在你可以/opt/idea/bin/idea.sh直接运行文件,

idea
Run Code Online (Sandbox Code Playgroud)


αғs*_*нιη 7

我们可以通过使用bind命令来调用它来定义一个函数和一个添加热键。打开~/.bashrc文件并将这些行添加到其中:

# define function that opens your program in working directory
Openprog(){
    /your-Program/path/here
}

# bind hotkey to it (<F12>)
bind -x '"\e[24~":"Openprog"'
Run Code Online (Sandbox Code Playgroud)

现在,当您按下 时F12,您的程序将启动。

注意: 一种快速确定转义码的方法:

打开终端并按Ctrl+ V。现在按您最喜欢的键盘快捷键。应该会出现正确的转义码。只要确保替换^[\e添加快捷方式,如更换前^[[24~\e[24~


小智 5

除了其他好的答案之外,请考虑~/.local/bin将此目录符号链接并添加到您的 PATH (.bashrc例如从您的内部)。此方法不需要特殊权限(/usr/local/bin例如,与符号链接不同)。这样,您就可以拥有一个标准的目录结构,而不会淹没您的 $HOME。在这些https://unix.stackexchange.com/问题上阅读更多相关信息: