简单的 shell 脚本有问题
trouble with simple shell script
所以我正在努力尝试在 linux 中编写 shell 脚本,我有一个可以获取当前股票报价并想将其保存在 txt 或 json 格式。似乎我可以 运行 终端中的脚本,但是当我在 crontab 上设置它时,它似乎失败了。有人能透露一点吗,这是我目前所知道的。
Cron 作业:
#!/usr/bin
* * * * * PATH=$PATH:/usr/local/bin:/usr/bin && export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH && /home/mint/Desktop/BashScripts/Stocks/GetStocks.sh
Shell 脚本:
#!/bin/bash
* * * * * echo -e "[{'Ford':' $(curl -s 'http://download.finance.yahoo.com/d/quotes.csv?s=aapl&f=l1') ', 'Square':' $(curl -s 'http://download.finance.yahoo.com/d/quotes.csv?s=sq&f=l1') ' }]" > stocks.txt
错误:
/home/mint/Desktop/BashScripts/Stocks/GetStocks.sh: line 2: dead.letter: command not found
去掉echo
前面的星号。它们不属于 shell 脚本。
它将它们解释为通配符,并尝试执行第一个匹配
名称,即 dead.letter
.
此外,不要将输出发送到 stocks.txt
,您应该给它一个
到某个地方的绝对路径,它可以写成 /home/jpavlov/stocks.txt
。
你可能想使用 >>
所以它附加而不是覆盖。
Cron 作业: 您的代码看起来是正确的。
Shell 脚本: 您需要删除(所有前 5 个星号)* * * * *
来自这个 Shell 脚本。因为 crontab 的这些字段是为了
安排命令执行时间。所以这是它造成的问题。
So your final code would be following:
Cron 作业:
#!/usr/bin
* * * * * PATH=$PATH:/usr/local/bin:/usr/bin && export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH && /home/mint/Desktop/BashScripts/Stocks/GetStocks.sh
Shell 脚本:
#!/bin/bash
echo -e "[{'Ford':' $(curl -s 'http://download.finance.yahoo.com/d/quotes.csv?s=aapl&f=l1') ', 'Square':' $(curl -s 'http://download.finance.yahoo.com/d/quotes.csv?s=sq&f=l1') ' }]" > stocks.txt
所以我正在努力尝试在 linux 中编写 shell 脚本,我有一个可以获取当前股票报价并想将其保存在 txt 或 json 格式。似乎我可以 运行 终端中的脚本,但是当我在 crontab 上设置它时,它似乎失败了。有人能透露一点吗,这是我目前所知道的。
Cron 作业:
#!/usr/bin
* * * * * PATH=$PATH:/usr/local/bin:/usr/bin && export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH && /home/mint/Desktop/BashScripts/Stocks/GetStocks.sh
Shell 脚本:
#!/bin/bash
* * * * * echo -e "[{'Ford':' $(curl -s 'http://download.finance.yahoo.com/d/quotes.csv?s=aapl&f=l1') ', 'Square':' $(curl -s 'http://download.finance.yahoo.com/d/quotes.csv?s=sq&f=l1') ' }]" > stocks.txt
错误:
/home/mint/Desktop/BashScripts/Stocks/GetStocks.sh: line 2: dead.letter: command not found
去掉echo
前面的星号。它们不属于 shell 脚本。
它将它们解释为通配符,并尝试执行第一个匹配
名称,即 dead.letter
.
此外,不要将输出发送到 stocks.txt
,您应该给它一个
到某个地方的绝对路径,它可以写成 /home/jpavlov/stocks.txt
。
你可能想使用 >>
所以它附加而不是覆盖。
Cron 作业: 您的代码看起来是正确的。
Shell 脚本: 您需要删除(所有前 5 个星号)* * * * * 来自这个 Shell 脚本。因为 crontab 的这些字段是为了 安排命令执行时间。所以这是它造成的问题。
So your final code would be following:
Cron 作业:
#!/usr/bin
* * * * * PATH=$PATH:/usr/local/bin:/usr/bin && export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH && /home/mint/Desktop/BashScripts/Stocks/GetStocks.sh
Shell 脚本:
#!/bin/bash
echo -e "[{'Ford':' $(curl -s 'http://download.finance.yahoo.com/d/quotes.csv?s=aapl&f=l1') ', 'Square':' $(curl -s 'http://download.finance.yahoo.com/d/quotes.csv?s=sq&f=l1') ' }]" > stocks.txt