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


57

我想知道是否有一种无需输入完整路径即可运行程序/ shell脚本的方法:

/opt/idea/bin/idea.sh

您始终可以提供文件的完整路径。
muru

谢谢@muru,我知道这一点,但这是我经常使用的程序,因此我希望能够使用一个简单的命令而不是长文件路径来运行它。
强尼

nufailm.blogspot.com/2012/05/…这将有助于提出想法:)
dedunumax

Answers:


60

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

sudo ln -s /full/path/to/your/file /usr/local/bin/name_of_new_command

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

chmod +x /full/path/to/your/file

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

请注意,这仅对于家庭使用Linux是一个很好的解决方案。


11
请注意,您不应在符号链​​接中放置/usr/local/bin指向私有主文件夹中的脚本的符号链接,例如/home/jack/myscript.sh,因为jack通常只有用户才能执行它。符号链接对其他用户可见,但对它指向的文件不可见。在单用户系统上,这可能并不重要,但仍然是“好的做法”,将所有用户都可以读取的脚本(或指向脚本的链接)/usr/local/bin以及私有的,自制的脚本(或指向脚本的链接)放入~/bin文件夹中的一个用户。
Malte Skoruppa 2014年

在/ usr / sbin /中添加符号链接,使它可以从任何地方访问
Seyfi,

28

您可以添加/opt/idea/binPATH变量中:

PATH=/opt/idea/bin:"$PATH"

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

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


2
还:如果您使脚本可执行,则可以保留.sh扩展名(假设您使用脚本顶部的shebang)。只需“想法”就足够了。
Jacob Vlijm

1
@Jacob:您不能忽略扩展名,因为扩展名是可执行文件名的一部分(这不是Windows,在这种情况下,魔术会导致其他问题)。为了使用名称调用脚本idea,您必须创建一个指向该idea.sh脚本的链接或别名。
乔纳森·卡伦

2
@JonathanCallen卡伦,你当然可以!使脚本可执行,请从文件名和命令中删除.sh扩展名,并使用shebang#!/ bin / bash启动脚本。
Jacob Vlijm 2014年

1
@Jacob的意思是不重命名文件,您不能(而且这似乎是较大软件包的一部分,所以您不应该只是重命名文件)
Jonathan Callen

2
感谢@Jacob,请注意它上面写着“将脚本安装到系统PATH中的目录中”。该idea.sh脚本不是这样的脚本,实际上完全不支持将其移出安装目录。Debian打包规则不适用于此处。
janos 2014年

15

您可以在中创建一个函数~/.bashrc

some-name () {
    /path/to/your/file
    # or:
    #cd /path/to/your
    #./path
}

或者您可以创建一个alias

alias some-name='/path/to/your/file'
# or  
#alias some-name='cd /path/to/your/; ./file'

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

$ some-name

如果该文件不取决于它的运行位置,请考虑将其添加到您的~/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

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

$ file

(尽管名称选择不当,请考虑使用不太通用的名称。)


@Oli总是给我五分钟,我倾向于添加缩进。:)这很烦人,因为我需要欺骗编辑器以将Ctrl-K用于第二级缩进。
muru

2
+1特别适合添加file到您的解决方案~/bin,这是我通常所做的(对于较长的脚本)。我什至可能把它放在顶部:)别名对于带有某些参数(例如)的命令的快捷方式很有用alias l='ls -CF'尽管我已经看到了别名的强大用法。我不倾向于在中声明函数~/.bashrc(我更喜欢将所有脚本组织在中的单独文件中~/bin)。尽管所有这些都是关于品味的问题,但我想:)
Malte Skoruppa 2014年

@MalteSkoruppa我只是优先考虑最容易使用的方法cd,因为脚本可能取决于工作目录。:)否则,是的,我倾向于将文件放在~/bin自己的手中。
大师

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>'

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

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

现在双击打开它。


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"'

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

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

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


7

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

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

gedit ~/.bashrc

删除各#行之前的并保存,以使各行看起来像,

if [ -f ~/.bash_aliases ]; then
    . ~/.bash_aliases
fi

现在打开~/.bash_aliases文件,

gedit ~/.bash_aliases

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

alias idea='cd /opt/idea/bin && sudo ./idea.sh'

最终获取~/.bashrc文件,

source ~/.bashrc

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

idea

4

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


1

/usr/bindirecotyr中创建它的软链接:

ln -s /usr/bin/idea.sh  /opt/idea/bin/idea.sh

现在使用以下命令运行它:

idea.sh

0

或者您可以简单地使用

nano ~/.bashrc

并添加

PATH=/full/path/to/file:"$PATH"

最后,保存并退出。之后,您只需输入文件名即可。


0

我遵循了此处和其他位置的所有答案,因此很少有人提及您可能需要注销才能使该命令最终生效。

回顾一下,特别是对于Xubuntu,但是对于其他Debian / Ubuntu变体,我也写了这些简单的说明。

(在以下说明中,我们使用目录〜/ bin,因为这是这些操作系统自动查找命令的地方。请参见此处

易于使用的说明,可让您的命令生效:

# Open Terminal with Ctrl + Alt + T (or your system's own shortcut)

# You'll work in your home folder, no need to use sudo for any of this

cd # Go to home directory

mkdir -p bin # Create folder ~/bin if it doesn't exist

# Be careful not to type /bin, that's the bin folder in system root: /

sudo apt install nano # Skip this if you have Nano installed

nano bin/yournewcommand

    # In Nano, type:

    printf "Your new command works! \n" # \n means line break

    # Ctrl+X To leave Nano

    # Ctrl+Y To save the unsaved file

    # Enter to confirm

chmod +x bin/yournewcommand

yournewcommand # If you just created the bin folder, this command might not yet work.

# You must now log out and log back in to make the bin folder noticed (I think)

yournewcommand # Now it works! (You can use Tab to autocomplete the command you're typing)

# If you add a second file/command, it should work without logging out (at least in my tests)
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.