#!/usr/bin/env bash
scriptdir="$HOME"
touch $scriptdir/foo.txt
. "$scriptdir/foo.txt" ||
{ echo "Missing '$scriptdir/foo.txt'. Exiting." ;
exit 1 ;}
echo "$scriptdir/foo.txt is present"
echo
rm "$scriptdir/foo.txt"
. "$scriptdir/foo.txt" ||
{ echo "Missing '$scriptdir/foo.txt'. Exiting." ;
exit 1 ;}
.
我不明白in的用法. "$scriptdir/foo.txt" ||
它的功能似乎类似于if [ -f "$scriptdir/foo.txt ]
,是吗?
这样
scriptdir="$HOME"
touch $scriptdir/foo.txt
if [ -f "$scriptdir/foo.txt" ] ; then
echo
else
{ echo "Missing '$scriptdir/foo.txt'. Exiting." ;
exit 1 ;}
fi
产生类似的结果。
.
有人可以详细说明一下这里的用途吗?
如果我在 foo.txt 中编写一个脚本,那么该脚本可能会运行,因为.
会导致文件执行,而不仅仅是查看它是否存在?并且,只要$scriptdir/foo.txt
存在并且可执行,那么右半部分||
将永远不会运行,因为左半部分返回的退出状态为零?
答案1
.
是 bash 内置命令,与 相同source
,它的作用是从当前 shell 中的 FILENAME 读取并执行命令。在终端中输入help .
或help source
以查看其完整文档。
完整文档:
.: . filename [arguments]
Execute commands from a file in the current shell.
Read and execute commands from FILENAME in the current shell. The
entries in $PATH are used to find the directory containing FILENAME.
If any ARGUMENTS are supplied, they become the positional parameters
when FILENAME is executed.
Exit Status:
Returns the status of the last command executed in FILENAME; fails if
FILENAME cannot be read.