Linux shell 文件。 mkdir 和 pushd 命令没有做我想做的事
Linux shell file. mkdir and pushd commands not doing what I'd like
我正在尝试创建一个目录(如果它不存在),然后再往下,在该目录中创建一个日志文件。它将位于 当前 用户主目录
在伪代码中:
If directory "/home/LOGS" does not exist
make directory "/home/LOGS"
然后,无论何时创建日志文件,它都会保存在该目录中,而不是程序 运行 来自的目录。
这是我目前所拥有的,但它没有用...
pushd -n $"../LOGS" >/dev/null 2>&1
#Create the logs folder
if [ ! -d $"home/LOGS" ]; then
mkdir -p $"home/LOGS"
fi
如果有帮助的话,我的文件是这样保存的:
function savefile {
# Save to file
if [ -e $username.log ]; then
echo "Username already exists, returning you to the menu."
sleep 2
clear
menu
else
echo $fullname >> $username.log
echo $password >> $username.log
curdate=$(date +'%d/%m/%Y %H:%M:%S')
echo $curdate >> $username.log
echo "Creating your account"
sleep 2
clear
echo "Account created"
echo
afterBasic
fi
}
如有任何帮助,我们将不胜感激。
mkdir -p
本身提供了你想要的逻辑,所以你可以简单地做:
mkdir -p "$HOME/LOGS" && pushd "$HOME/LOGS" >/dev/null || exit
mkdir -p
创建目标目录(如果它不存在)然后更改到它。
- 请注意,即使目标已经存在,
mkdir -p
也表示成功。
- 这允许无条件使用
mkdir -p
,而不必担心目录是否已经存在。
&& pushd "$HOME/LOGS" >/dev/null
然后更改到目录 "$HOME/LOGS"
,抑制其通常的 stdout 输出 (>/dev/null
)
- 请注意,stderr 输出与您的代码不同,它被故意而不是 抑制,以免错误消息丢失。
- 为了安全起见,如果目录无法创建或更改为(因为此处的
exit
命令没有如果没有明确指定退出代码,则会传递前一个命令的退出代码 - 在这种情况下,根据定义,它是非零的)。
请注意,我已经使用了 "$HOME/LOGS"
,假设这是您真正想要的;即,当前用户主目录中的 LOGS
子目录。
如果您想要绝对路径 /home/LOGS
,只需从原始字符串中删除 $
。
$"home/LOGS"
将默认评估为 home/LOGS
,即 relative 路径。
很少使用的 $"..."
字符串用于 localization.
我正在尝试创建一个目录(如果它不存在),然后再往下,在该目录中创建一个日志文件。它将位于 当前 用户主目录
在伪代码中:
If directory "/home/LOGS" does not exist
make directory "/home/LOGS"
然后,无论何时创建日志文件,它都会保存在该目录中,而不是程序 运行 来自的目录。
这是我目前所拥有的,但它没有用...
pushd -n $"../LOGS" >/dev/null 2>&1
#Create the logs folder
if [ ! -d $"home/LOGS" ]; then
mkdir -p $"home/LOGS"
fi
如果有帮助的话,我的文件是这样保存的:
function savefile {
# Save to file
if [ -e $username.log ]; then
echo "Username already exists, returning you to the menu."
sleep 2
clear
menu
else
echo $fullname >> $username.log
echo $password >> $username.log
curdate=$(date +'%d/%m/%Y %H:%M:%S')
echo $curdate >> $username.log
echo "Creating your account"
sleep 2
clear
echo "Account created"
echo
afterBasic
fi
}
如有任何帮助,我们将不胜感激。
mkdir -p
本身提供了你想要的逻辑,所以你可以简单地做:
mkdir -p "$HOME/LOGS" && pushd "$HOME/LOGS" >/dev/null || exit
mkdir -p
创建目标目录(如果它不存在)然后更改到它。- 请注意,即使目标已经存在,
mkdir -p
也表示成功。 - 这允许无条件使用
mkdir -p
,而不必担心目录是否已经存在。
- 请注意,即使目标已经存在,
&& pushd "$HOME/LOGS" >/dev/null
然后更改到目录"$HOME/LOGS"
,抑制其通常的 stdout 输出 (>/dev/null
)- 请注意,stderr 输出与您的代码不同,它被故意而不是 抑制,以免错误消息丢失。
- 为了安全起见,如果目录无法创建或更改为(因为此处的
exit
命令没有如果没有明确指定退出代码,则会传递前一个命令的退出代码 - 在这种情况下,根据定义,它是非零的)。
请注意,我已经使用了 "$HOME/LOGS"
,假设这是您真正想要的;即,当前用户主目录中的 LOGS
子目录。
如果您想要绝对路径 /home/LOGS
,只需从原始字符串中删除 $
。
$"home/LOGS"
将默认评估为 home/LOGS
,即 relative 路径。
很少使用的 $"..."
字符串用于 localization.