如何让我的BASH脚本知道保存的路径

时间:2014-03-28 15:55:47

标签: linux bash

我要编写一个脚本,当你运行它时,它会创建一个包含用户计算机详细信息的html页面......但我只有一个问题...... 如果用户将该脚本放在一个文件夹中并将其设置为cronjob,当crontab执行它时,脚本会在主目录中创建一个文件夹,这很糟糕,因为,我希望脚本使用HTML文档创建文件夹与脚本相同的目录......我该怎么办?

thnx; - )

5 个答案:

答案 0 :(得分:0)

我通常会做以下事情:

#!/bin/bash
# sample script to change directory and save a file
WORKDIR=/home/file/n34_panda
cd $WORKDIR

echo "this "> newfile.txt

这是一个简单的答案,无需查看其余代码。说实话,最简单的方法就是添加命令:

cd /path/to/html/docs

然后,您可以添加其余代码

答案 1 :(得分:0)

从多个目录中尝试此脚本。它将始终返回其位置。

#!/bin/bash

echo ${0%/*}

答案 2 :(得分:0)

您只需将cron设置如下:

# m h  dom mon dow   command
* * * * * cd /path-where-you-want-to-save/ && /path/of/yourscript.sh

答案 3 :(得分:0)

正如评论中所建议的,there are ways of a script knowing what directory it is stored in。但是,我会建议一个更简单的解决方案。在脚本中使用绝对文件路径。目标目录可以是脚本的参数。这使脚本更加灵活;这意味着如果要在多个位置执行相同的任务,则不必将多个副本存储在单独的目录中。

#!/bin/bash

output_dir="$1" # first argument to the script
echo "blah blah" > "$output_dir"/filename

答案 4 :(得分:0)

如果从远程文件夹执行,则使用bash参数扩展(analyzer)从特殊变量$0(存储脚本名称)中提取路径,否则返回当前目录({{如果从当前目录执行,则不会包含完整路径。)

$0

我正在测试特殊变量#!/bin/bash if [[ "$0" == */* ]]; then script_path=${0%/*} else script_path=$(pwd) fi 是否包含$0。如果是,那么使用参数扩展来截断最后/之后的所有内容。如果它不包含/,那么我们必须在当前目录中,因此存储/的结果。

根据我的测试,如果执行pwd/pathTo/script.sh

,我可以获得相同的输出

我在Cygwin中使用GNU bash版本4.3.42进行了测试