以下是我对这个问题的尝试。这是一个功能脚本,但是我必须指定用于每种文件类型的应用程序。由于有关默认应用程序的信息必须已经存储在Linux / Ubuntu上的某个位置,因此如何访问它们并将其合并到脚本中?
另外,我的脚本可以以任何方式更“优雅”吗?
感谢您对Bash脚本初学者的帮助!我感谢任何评论。
#!/bin/bash
# Open the latest file in ~/Downloads
filename=$(ls -t ~/Downloads | head -1)
filetype=$(echo -n $filename | tail -c -3)
if [ $filetype == "txt" ]; then
leafpad ~/Downloads/$filename
elif [ $filetype == "pdf" ]; then
evince ~/Downloads/$filename
fi
欢迎使用bash编程。:-)
首先,我将带您参阅Bash常见问题解答。很棒的资源,很多技巧,观点和警告。
其中之一是脚本所遇到的经典解析LS问题。基本思想是您不希望信任ls
命令的输出,因为特殊字符(例如空格和控制字符)可能以不允许您引用文件的方式表示。
您正在打开“最后一个”文件,具体取决于该ls
命令正在执行的排序。为了检测没有的 最新文件ls
,我们需要一些额外的代码。例如:
#!/bin/sh
last=0
for filename in ~/Downloads/*; do
when=$(stat -c '%Y' "$filename")
if [ $when -gt $last ]; then
last=$when
to_open="$filename"
fi
done
xdg-open "$to_open"
我们的想法是,我们将遍历Downloads
目录中的每个文件,并使用stat
命令对时间戳最大的文件进行优化。然后使用来打开该文件xdg-open
,该文件可能已经安装在您的系统上,因为它是工具集的一部分,而工具集是许多其他应用程序的依赖项。
如果您没有xdg-open,则可以从xdg-utils软件包安装它,该软件包使用Linux发行版附近的任何软件包管理系统。
另一种可能性是gnome-open
,它是Gnome桌面(libgnome
准确地说是软件包)的一部分。YMMV。我们需要更多地了解您的发行版和桌面环境,才能提出更好的建议。
请注意,如果您确实想继续按扩展名选择应用程序,则可能要考虑使用开关而不是一系列if
s:
...
case "${filename##*.}" in
txt)
leafpad "$filename"
;;
pdf)
xdg-open "$filename"
;;
*)
echo "ERROR: can't open '$filename'" >&2
;;
esac
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句