我创建了一个简单的脚本,用于将当前工作目录中所有带有后缀的文件移动.sh
到指定目录
如果没有这样的文件,脚本应该只输出我输入的错误消息,而不是系统错误消息:mv: cannot stat ‘*.sh’: No such file or directory
我尝试在命令 put./shm 2> /dev/null
之后添加mv
,导致脚本不停地运行!
如何使系统错误消息静音?
#!/bin/bash
echo "Moving all script files to script directory..."
mv *.sh $HOME/linux/scripts
#./shm 2> /dev/null
if [ $? -ne 0 ]
then
echo "No files with .sh suffix"
fi
答案1
我认为消除错误消息的方法是错误的。对我来说,用它来检查更好。
#!/bin/bash
if ls *.sh &> /dev/null
then
echo "Moving all script files to script directory..."
mv -v -n *.sh $HOME/linux/scripts
else
echo "No files with .sh suffix -- nothing to move"
fi
答案2
下面的脚本应该会有帮助,它将帮助您显示自定义错误消息。
#!/bin/bash
files=$(ls *.sh 2> /dev/null)
if [ -z "$files" ]
then
echo "No script files found. Exiting.."
exit
fi
echo "Moving all script files to script directory..."
for file in $files
do
if ! mv $file $HOME/linux/scripts
then
echo "Unable to move file $file"
fi
done
"*.sh"
当脚本被执行时,脚本当前工作目录中的文件列表被分配给files
变量。
接下来我们进行健全性检查以查看$files
变量是否为空。如果为空则表示"*.sh"
目录中没有文件。
如果文件存在,for
循环将迭代$files
变量并移动每个文件。如果mv
命令失败,将会打印错误。
for
有关循环的更多详细信息,请参阅这个文件。
答案3
添加2>/dev/null
mv 命令以将 stderr 重定向到 /dev/null:
mv *.sh $HOME/linux/scripts 2>/dev/null
答案4
关于 Costas 或 Kannan 的其他解决方案:这
if ! mv $file $HOME/linux/scripts
应替换为
if ! mv "$file" "$HOME/linux/scripts/."
还要在脚本开始处添加此行
mkdir -p "$HOME/linux/scripts"
否则,当 linux/scripts 丢失时,每个文件都将作为一个文件移动到那里并覆盖前一个文件。
如果文件或文件夹名称中有空格,则需要引号。