为了开始学习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问题,但我想确保在我做任何其他事情之前我排除代码问题。
我确信这很容易,所以提前感谢额外的眼睛。
答案 0 :(得分:3)
您刚为脚本选择了一个不幸的名称。 quote
也是bash_completion包中函数的名称,函数覆盖外部脚本。
type quote
会表明它是一个函数(whereis
并不知道这些事情。)
重命名或禁用bash_completion。或者每次都运行command quote
。