Unix shell脚本找出脚本文件所在的目录?
基本上我需要使用与脚本文件位置相关的路径运行脚本,如何将当前目录更改为脚本文件所在的同一目录?
在Bash中,你应该得到你需要的这样的东西:
#!/usr/bin/env bash
BASEDIR=$(dirname "$0")
echo "$BASEDIR"
原始帖子包含解决方案(忽略响应,他们不添加任何有用的东西)。 有趣的工作是由提到的带选项-f
unix命令readlink
完成的。 当脚本被绝对以及相对路径调用时起作用。
对于bash,sh,ksh:
#!/bin/bash
# Absolute path to this script, e.g. /home/user/bin/foo.sh
SCRIPT=$(readlink -f "$0")
# Absolute path this script is in, thus /home/user/bin
SCRIPTPATH=$(dirname "$SCRIPT")
echo $SCRIPTPATH
对于tcsh,csh:
#!/bin/tcsh
# Absolute path to this script, e.g. /home/user/bin/foo.csh
set SCRIPT=`readlink -f "$0"`
# Absolute path this script is in, thus /home/user/bin
set SCRIPTPATH=`dirname "$SCRIPT"`
echo $SCRIPTPATH
另请参阅:https://stackoverflow.com/a/246128/59087
假设你正在使用bash
#!/bin/bash
current_dir=$(pwd)
script_dir=$(dirname $0)
echo $current_dir
echo $script_dir
该脚本应该打印您所在的目录,然后打印脚本所在的目录。例如,使用/home/mez/
的脚本从/
调用它时,它会输出
/
/home/mez
请记住,从命令输出中分配变量时,请将命令封装在$(
和)
- 否则您将无法获得所需的输出。
上一篇: Unix shell script find out which directory the script file resides?
下一篇: FetchedResultsController and data for custom header section