繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM