gpt4 book ai didi

Linux shell 文件。 mkdir 和 Pushd 命令没有执行我想要的操作

转载 作者:太空宇宙 更新时间:2023-11-04 04:40:52 24 4
gpt4 key购买 nike

我试图创建一个目录(如果它不存在),然后在该目录中创建一个日志文件。它将位于当前用户主目录
在伪代码中:

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 如果无法创建或更改目录,则使用非零退出代码退出脚本(以表示失败)(因为此处的 exit 命令未显式指定退出代码,因此会传递上一个命令的退出代码 - 在本例中,根据定义,该退出代码为非零)。
<小时/>

请注意,我使用了“$HOME/LOGS”,假设这就是您真正想要的;即当前用户主目录中的 LOGS 子目录。

如果您想要绝对路径 /home/LOGS,只需从原始字符串中删除 $ 即可。

$"home/LOGS" 默认情况下将计算为 home/LOGS,即相对路径。很少使用的 $"..." 字符串用于本地化

关于Linux shell 文件。 mkdir 和 Pushd 命令没有执行我想要的操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30140908/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com