从不同的目录运行BASH脚本的问题(目录在路径中)

时间:2014-04-30 01:37:13

标签: linux bash curl chmod getopt

为了开始学习BASH脚本,我创建了一个简单的脚本,从YAHOO卷起股票价格并将其打印到STDOUT。我已经为每个人设置了rwx的权限,并将文件移动到我的路径中:

脚本:

root@raspberrypi:~/code/scripts$ cat quote
#!/bin/bash

while getopts "s:" opt; do
    case $opt in
        s)STOCK="$OPTARG";;
        \?) echo "ERROR"; exit 1;;
    esac
done

PRICE=$(curl -s "http://download.finance.yahoo.com/d/quotes.csv?s=${STOCK}&f=l1")
echo "${STOCK}: ${PRICE}"; exit 0

exit 0

然后我为所有用户设置了权限:

root@raspberrypi:~/code/scripts$ chmod 777 quote

这是我的$ PATH:

root@raspberrypi:~/code/scripts$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

我现在将它移到我的路径中,我读到的是自定义用户脚本的适当位置:

root@raspberrypi:~/code/scripts$ ls -la /usr/local/bin
total 12K
drwxrwsr-x  2 root staff 4.0K Apr 30 01:28 ./
drwxrwsr-x 10 root staff 4.0K Jan  1  1970 ../
-rwxrwxrwx  1 root root   433 Apr 30 01:22 quote*

哪个命令会找到它(预期):

root@raspberrypi:~/code/scripts$ which quote
/usr/local/bin/quote

问题:当我运行脚本时,它返回下一行的第一个选项,后跟我的提示:

root@raspberrypi:~/code/scripts$ quote -s aapl
'-s'root@raspberrypi:~/code/scripts$

但是,当我使用完整路径运行脚本时,它可以正常工作:

root@raspberrypi:~/code/scripts$ /usr/local/bin/quote -s aapl
-s: 592.33

道歉,如果这不是一个编程问题,而是一个Unix问题,但我想确保在我做任何其他事情之前我排除代码问题。

我确信这很容易,所以提前感谢额外的眼睛。

1 个答案:

答案 0 :(得分:3)

您刚为脚本选择了一个不幸的名称。 quote也是bash_completion包中函数的名称,函数覆盖外部脚本。

type quote会表明它是一个函数(whereis并不知道这些事情。)

重命名或禁用bash_completion。或者每次都运行command quote