仅当目录使用shell脚本存在时才删除该目录
我有一个shell(仅当目录使用shell脚本存在时才删除该目录,shell,Shell,我有一个shell(ksh)脚本。我想确定某个目录是否存在于/tmp中,如果存在,则必须将其删除。我的剧本是: 测试 #!/usr/bin/ksh # what should I write here? if [[ -f /tmp/dir.lock ]]; then echo "Removing Lock" rm -rf /tmp/dir.lock fi 我怎样才能继续?我没有得到想要的结果:当我执行脚本时,目录没有被删除,我的屏幕上也没有得到删除锁的输出 我手动进行了检查,锁
ksh
)脚本。我想确定某个目录是否存在于/tmp
中,如果存在,则必须将其删除。我的剧本是:
测试
#!/usr/bin/ksh
# what should I write here?
if [[ -f /tmp/dir.lock ]]; then
echo "Removing Lock"
rm -rf /tmp/dir.lock
fi
我怎样才能继续?我没有得到想要的结果:当我执行脚本时,目录没有被删除,我的屏幕上也没有得到删除锁的输出
我手动进行了检查,锁定文件位于该位置。
锁文件是由TCL程序使用set MUTEX\u lock”/tmp/dir.lock“
创建的。对于目录检查,您应该使用-d
:
if [[ -d /tmp/dir.lock ]]; then
echo "Removing Lock"
rm -rf /tmp/dir.lock
fi
除了-f
与-d
相比,请注意[[]]
不是POSIX,而[]
是POSIX。您多次使用的任何字符串或路径都应该位于一个变量中,以避免键入错误,特别是当您使用rm-rf
时,它会以极大的偏见删除。最可移植的解决方案是
DIR=/tmp/dir.lock
if [ -d "$DIR" ]; then
printf '%s\n' "Removing Lock ($DIR)"
rm -rf "$DIR"
fi
该文件是否存在于目录中?@Rubens:请检查更新的问题看起来您对自己正在做的事情感到非常困惑:您说您有一个Tcl脚本(扩展名以.Tcl
结尾),同时以shebang开始(顺便说一句,这是错误的,因为它没有指定完整的路径名,而是相对路径名,因为您忘记了第一个斜杠)它告诉内核使用Korn shell执行脚本。ksh
。有太多的混乱,甚至不可能推断出您真正想要做什么。该脚本显然是Unix shell脚本,而不是Tcl脚本。@kostix:该脚本只是一个示例脚本,已经有开发人员编写了这种类型的脚本(大)我需要扩展一些功能。像这样使用printf
有点奇怪。有什么理由吗?为什么不直接做echo“Removing Lock($DIR)”
?因为printf
是新的echo,它是90年代的。没有系统V和BSD的疯狂,没有-n和-c的麻烦,完全的格式。我需要说更多吗?:-)