从任何地方运行脚本


8

我有一个脚本:

#!/bin/bash
echo "$(dirname $(readlink -e $1))/$(basename $1)"

坐在这里:/home/myuser/bin/abspath.sh具有执行权限。

如果我运行,echo $PATH则会得到以下信息:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/myuser/bin

我希望能够从任何目录调用abspath <some_path_here>它并调用我的脚本。我正在使用bash,我做错了什么?

Answers:


30

您要键入abspath,但程序名为abspath.sh。问题不在于它是否在PATH中,而在于您根本没有使用它的名称来调用它。

您有两种选择:

  1. 键入abspath.sh
  2. 将该程序重命名为abspath

1
...或创建一个simlink :cd $HOME/bin ; ln -s abspath.sh abspath。这使您可以为脚本保留正确的扩展名,并拥有自己喜欢的工具。(您可以将来用Python脚本替换shell脚本,作为示例...)
F. Hauri

或创建一个别名。
詹妮·D

6

这段代码足够小,我可以将其编码为shell函数:

abspath() {
    echo "$(dirname "$(readlink -e "$1")")/$(basename "$1")" 
} 

是的,您确实想要所有这些报价。


4

通过在.bashrc文件中添加命令来设置别名。

alias abspath='sh /home/myuser/bin/abspath.sh'

并且不要忘记源文件。


1
你为什么要在这里sudo?
CVn

1
如果我有足够的声誉,我会拒绝投票,因为不必要地使用sudo完全是错误的。似乎有些人会自动使用sudo进行所有操作,而不是学习何时何地需要它。
斯科特遣散费

你们同意。而且我知道何时使用sudo。我没有看到所有问题。
Balasekhar Nelli

2

我将重命名您的bash脚本,abspath然后将其移至bin目录。然后,您将无法abspath从任何地方拨打电话


0

第三种选择是创建一个名为abspath的别名,该别名指向您的abspath.sh脚本。


5
如已接受的解决方案所解释的那样,如果不需要修复的话,则不需要它,而且也很费解,并且实际上隐藏了问题而不是解决问题。
dawud

不值得争论,但是不用说,如果您使用一种解决方案来解决它,则无需应用另一种解决方案。是的,这是一个临时解决方案,直接引用shell脚本是一个更理想的解决方案。
tokamak
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.