所以我是Linux的新手,我需要一些帮助。我必须编写一个bash脚本,我必须使用脚本的父目录在那里创建一个文件,无论脚本在哪里。它应该是这样的:
如果我的脚本在“/ home / student /”中,我需要使用脚本命令创建/ home /中另一个名为txt的文件。有什么想法吗?谢谢。
答案 0 :(得分:2)
如果您希望能够从任何地方运行脚本,那就非常精细了。
例如:如果您的脚本位于/home/myHome/someDir/someOther
,并且您希望在运行脚本时在/home/myHome/someDir
中创建文件。
要解决此问题,您只需要首先派生脚本所在的目录。
可以使用:
完成 SCRIPT_DIRECTORY="$(dirname "$0")"
touch "$SCRIPT_DIRECTORY/../myFile.txt"
编辑:如果你想处理符号链接,实际上它可能会更加微妙。即:如果符号链接/home/myHome/mySymlink
指向您的脚本,并且是实际被调用的那个,则前一个脚本将考虑/home/myHome/
而不是/home/myHome/someDir/someOther
要处理这种情况,你可以做
if [ -L "$0" ] && [ -x $(which readlink) ]; then
ACTUAL_SCRIPT_FILE="$(readlink -mn "$0")"
else
ACTUAL_SCRIPT_FILE="$0"
fi
SCRIPT_DIRECTORY="$(dirname "$ACTUAL_SCRIPT_FILE")"
touch "$SCRIPT_DIRECTORY/../myFile.txt"
答案 1 :(得分:1)
使用..
指向父目录。所以你可以用
MY_SCRIPTDIR="$(dirname $0)"
touch ${MY_SCRIPTDIR}/../abc.txt
从命令提示符或shell脚本中。
答案 2 :(得分:0)
不幸的是,其他答案要么为您提供当前工作目录而不是脚本所在的目录,要么如果脚本或其中一个目录是符号链接而不是真实目录,它们将无法工作
将起作用:
dirname $(readlink -f "$0")
说明:
readlink
将解决沿途的任何符号链接dirname
仅从脚本的完整路径中获取目录名称 - 对于角落案例而言,它比手动查找斜杠等更具可读性和安全性。现在,即使在复杂的情况下,您也会得到正确的结果:如果您的脚本位于/tmp
并且您在/tmp/abc/
中创建了一个符号链接,那么您当前的目录将是{{ 1}}并且您运行/home
,它将正确输出/tmp/abc/your-script
,而不是/tmp
或/home
。