为bash脚本创建别名


10

因此,我尝试进行实验并创建了一个aliasin .bashrc。但是,当我测试命令时,我得到:

[rkahil@netmon3 ~]$ menu
-bash: menu: command not found

这是.bashrc文件中的内容:

# Source global definitions

if [ -f /etc/bashrc ]; then
        . /etc/bashrc
fi

# User specific aliases and functions
alias menu='./menuScript.sh'
alias vi='vim'

有趣的是,当我创建别名时vi,它起作用了。但是菜单没有。我在UnixStackExchange上查找了以前的帖子,并尝试关注其他帖子,但无济于事。其他人有什么建议吗?


1
您是否尝试过使用别名menu ='bash ./menuScript.sh'吗?(我不在Linux机器上,无法对其进行测试)
Con7e 2014年

您在哪里运行“菜单”?如果与“ menuScript.sh”所在的目录不同,则它将抱怨“找不到命令”。也许您应该使用绝对路径?
garethTheRed 2014年

1
@garethTheRed它会说./menuScript.sh: command not found
Michael Mrozek

@MichaelMrozek-不错。我刚刚检查了一下并说No such file or directory,这仍然与OP的错误不同。不过,这一点仍然存在-最好使用绝对路径,除非总是仅从menuScript.sh驻留目录使用别名。
garethTheRed 2014年

1
@ryekayo完成了:)
Con7e

Answers:


9

您应该尝试一下alias menu='bash ./menuScript.sh'。我目前不在Linux机器上,因此无法自己对其进行测试,但是它应该可以工作。调用别名时,它不知道如何处理路径,因此必须bash在开头添加。

进行更改后,重置终端确实有帮助。


我不明白第一段的重要性-除非menuScript.sh没有被chmod执行,否则错误消息将是“权限被拒绝”。我怀疑强制重新读取.bashrc文件才是答案。……………………PS PS ./menuScript.sh通过尝试执行文件,外壳程序知道如何处理路径,就像用户键入时一样。
斯科特

7

当你做

alias menu='./menuScript.sh'

您创建了一个别名,上面写着“那个文件”,但没有说出实际使用该文件的方式。

但是,如果您这样做

alias menu='source ./menuScript.sh'

要么

alias menu='. ./menuScript.sh'

您是说运行该文件。


6

您是否记得在进行更改后将〜/ .bashrc文件作为源?因为更改将在重新启动计算机或只是获取文件后在.bashrc文件中生效。


2
这种类型的帖子似乎更适合发表评论。
HalosGhost

2
@HalosGhost您如何看待?这也是我首先想到的一件事,它将导致以下问题
Michael Mrozek

@MichaelMrozek,我之所以建议这样做仅是因为在我看来,回答帖子应该提供一种确定的解决方案,例如,“您忘记了寻找源头.bashrc,请执行以下操作……”。另一方面,澄清问题(例如,“您是否忘记了……?”)似乎更适合于评论。无需过多改写即可使该帖子看起来更适合答案。
HalosGhost

重新启动计算机可以解决问题,但是您只需注销tty或会话即可(如果使用登录管理器)。如果您登录到图形环境,而又不想使用source ~/.bashrc. ~/.bashrc,那么您也可以打开另一个shell。就这么简单。无需重启。
Dylan

0

之所以可以使用它,vim是因为该程序已经可以在没有直接路径的情况下调用。您不必明确地说“我希望将此作为程序执行”,因为vim已经是一个了。它被硬编码到OS中,当它收到命令时vim,可以执行文件/usr/bin/vi或在实际程序所在的任何地方。


嗯,不,它没有硬编码到操作系统中。在中有一个称为vimavailable的$PATH文件,该文件可能是二进制可执行文件,可执行脚本,甚至是指向另一个程序的符号链接。如果删除该条目,vim则该文件将不再对用户可用。
roaima

@roaima我的意思是,调用vim与调用自定义程序略有不同。我确实看到您的意思,但是同意
Nathanael Morgan

我有一个名为的脚本ifvi,它存在于我的脚本中$HOME/bin(恰好在我的$PATH)。我只是以与运行系统安装的二进制文件完全相同的方式使用它。这是一个自定义程序真的没关系。
roaima

0

别名有两个问题

alias menu='./menuScript.sh'
  1. 调用别名时,它要求您位于特定目录中。如果您所在的目录menuScript.sh不存在,则别名将无法执行。

    最好menuScript.sh在定义别名时指定脚本的完整绝对路径,例如

    alias menu="$HOME/local/bin/menuScript.sh"

    或类似。

  2. 正如其他人已经说过的那样,别名可能失败的另一个原因是脚本不可执行,或者脚本行无效#!。确保脚本是可执行的

    chmod +x menuScript.sh

    并且脚本中的第一行是

    #!/bin/bash

    或系统上的任何路径bash(或为脚本编写的任何shell)。

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.