pau*_*que 14 linux shell batch-file
我正在使用sh将一些Windows批处理文件转换为Unix脚本.我有问题,因为某些行为取决于批处理文件中可用的%~dp0宏.
有没有相当于这个?有没有办法获得执行脚本所在的目录?
是的你可以!这是在争论中。:)
看着
${0}
Run Code Online (Sandbox Code Playgroud)
将其与
{$var%Pattern}
Remove from $var the shortest part of $Pattern that matches the back end of $var.
Run Code Online (Sandbox Code Playgroud)
你想要的只是
${0%/*}
Run Code Online (Sandbox Code Playgroud)
我推荐《高级 Bash 脚本指南》 (这也是上述信息的来源)。特别是“将 DOS 批处理文件转换为 Shell 脚本”部分 可能对您有用。:)
如果我误解了您的意思,您可能必须将其与“pwd”的输出结合起来。因为它只包含调用脚本的路径!尝试以下脚本:
#!/bin/bash
called_path=${0%/*}
stripped=${called_path#[^/]*}
real_path=`pwd`$stripped
echo "called path: $called_path"
echo "stripped: $stripped"
echo "pwd: `pwd`"
echo "real path: $real_path
Run Code Online (Sandbox Code Playgroud)
但这需要一些工作。我建议使用 Dave Webb 的方法,除非这是不可能的。
问题(对你而言)$0
是它被设置为用于调用脚本的任何命令行,而不是脚本本身的位置.这可能使得很难获得包含脚本的目录的完整路径,这是您%~dp0
在Windows批处理文件中获得的.
例如,请考虑以下脚本dollar.sh
:
#!/bin/bash
echo $0
Run Code Online (Sandbox Code Playgroud)
如果您运行它,您将获得以下输出:
# ./dollar.sh
./dollar.sh
# /tmp/dollar.sh
/tmp/dollar.sh
Run Code Online (Sandbox Code Playgroud)
因此,要获取脚本的完全限定目录名,请执行以下操作:
cd `dirname $0`
SCRIPTDIR=`pwd`
cd -
Run Code Online (Sandbox Code Playgroud)
其工作原理如下:
cd
使用命令行中的相对路径或绝对路径到脚本目录.SCRIPTDIR
.cd -
" 返回上一个工作目录. 归档时间: |
|
查看次数: |
12951 次 |
最近记录: |