[英]How to make my BASH script know the path that is saved
我要编写一个脚本,当您运行它时,它将创建一个包含用户计算机详细信息的html页...但是我只有一个问题...如果用户将该脚本放在一个文件夹中并将其设置为cronjob ,当crontab执行该脚本时,该脚本会在主目录中创建一个文件夹,这很不好,因为我希望该脚本使用HTML文档位于与该脚本相同的目录来创建该文件夹...我该怎么办? ?
thnx ;-)
我通常会执行以下操作:
#!/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
然后,您可以添加其余代码
从几个目录尝试此脚本。 它将始终返回其位置。
#!/bin/bash
echo ${0%/*}
您可以简单地将cron设置如下:
# m h dom mon dow command
* * * * * cd /path-where-you-want-to-save/ && /path/of/yourscript.sh
如注释中所建议, 脚本可以通过多种方式知道其存储在哪个目录中 。 但是,我建议一个更简单的解决方案。 在脚本中使用绝对文件路径。 目标目录可以是脚本的参数。 这使脚本更加灵活。 这意味着,如果您想在一个以上的位置中执行同一任务,则不必将多个副本存储在单独的目录中。
#!/bin/bash
output_dir="$1" # first argument to the script
echo "blah blah" > "$output_dir"/filename
使用bash参数扩展( https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html )来从特殊变量$0
(存储脚本名称)中提取路径从远程文件夹执行,否则从当前目录执行(如果从当前目录执行, $0
将不包含完整路径)。
#!/bin/bash
if [[ "$0" == */* ]]; then
script_path=${0%/*}
else
script_path=$(pwd)
fi
我正在测试特殊变量$0
包含/
。 如果是这样,则使用参数扩展来截断最后一个/
之后的所有内容。 如果它不包含/
那么我们必须位于当前目录中,因此存储pwd
的结果。
从我的测试中,如果以/pathTo/script.sh
或按/pathTo/script.sh
pushd /pathTo; ./script.sh; popd
执行,则可以得到相同的输出pushd /pathTo; ./script.sh; popd
pushd /pathTo; ./script.sh; popd
我在Cygwin中使用GNU bash 4.3.42版对此进行了测试
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.