我正在使用bash脚本进行DBMS项目。我遇到了一个问题No such file or directory
,但该文件已经存在,并且它也在工作,但当我从Main_Menu
文件中获取此文件时,它无法按预期工作。有时它可以工作,有时不可以。
Drop_DB.sh:
#!/bin/bash
read -rp "Enter the name of db you want to remove: " db_name
# we use this variable as flag to check everything is ok.
error=""
# function for validations
function validation {
if [ -d "./DataBases" ]
then
error="0"
else
error="1"
echo "Error! DataBases file not exist ❌"
fi
if [ -d "./DataBases/$db_name" -a $error = 0 ]
then
error="0"
else
error="1"
echo "Error! No Database with this name: $db_name ❌"
fi
}
# Call function validation first
validation
if [ $error -eq 0 ]
then
rm -r "./DataBases/$db_name"
echo "Database: $db_name deleted successfully ✓ ✓"
else
echo "Can't complete this action ❌"
fi
List_DB.sh:
#!/bin/bash
error=""
function validation {
if [ -d "./DataBases" ]
then
error="0"
else
error="1"
echo "Error! DataBases file not exist ❌"
fi
if [ ! -d "./DataBases/" -a $error = 0 ]
then
error="1"
echo "Error! There's no DBs yet ❌"
else
error="0"
fi
}
# call validation function
validation
if [ $error -eq 0 ]
then
# 3 - display only directories.
cd ./DataBases
ls -d */
else
echo "Can't complete this action ❌❌"
fi
主菜单.sh
#!/bin/bash
options=("Create Database" "List Databases" "Connect To Databases" "Drop Database" "Exit")
PS3="Enter choices from 1 to 5: "
while [[ "$choice" != "Exit" ]]
do
echo " "
select choice in "${options[@]}"
do
case $choice in
"Create Database" ) source ./Create_DB.sh
break
;;
"List Databases" ) source ./List_DB.sh
break
;;
"Connect To Databases" ) source ./Connect_DB.sh
break
;;
"Drop Database" ) source ./Drop_DB.sh
break
;;
"Exit" ) exit
break
;;
*) echo "Invalid input please try again later"
;;
esac
done
done
我以为文件需要执行权限,但我错了:
$ ls -l
-rwxrwxr-x. 1 aem aem 804 Apr 8 14:45 Drop_DB.sh
-rwxrwxr-x. 1 aem aem 696 Apr 8 14:41 Mainmenu.sh
下面是错误:
./Mainmenu.sh: line25: ./Drop_DB.sh: No such file or directory
********************************"No such file or directory" but it exists,但仍具有相同的错误。
编辑:
我这里的问题是我在List_DB.sh
文件中做了cd
来列出那里的所有目录。所以,在执行List_DB.sh
之后,我的pwd
是DataBases/$DB_Name
目录,脚本位于另一个路径,这意味着DataBases/$DB_Name
中的No such file or directory
。我通过在List_DB.sh
文件中添加cd ..
来解决这个问题,以返回主文件夹。
1条答案
按热度按时间xzabzqsa1#
几个问题/观察:
List_DB.sh
,但是这个文件不在你的ls -l
输出中,你的脚本是否位于不同的目录中?请记住:
cd
操作)都“丢失”(在cd
的情况下,就好像cd
被“撤消”,并且您被留在了您开始的目录中)cd
操作)都保留在主shell中(在cd
的情况下,您不会返回到开始的位置)我的猜测是:最后一个成功 sourced 的脚本(
List_DB.sh
?)执行了一个操作(例如,cd
),使父脚本位于不同的目录中,因此出现了错误消息。