在 /usr/local/bin 中安装 .sh 脚本的安全方法?

在 /usr/local/bin 中安装 .sh 脚本的安全方法?

我想在 Ubuntu 16.04 中正确包含以下脚本。代码

#!/bin/sh
# http://tex.stackexchange.com/a/20886/13173
# $Id: pdf2eps,v 0.01 2005/10/28 00:55:46 Herbert Voss Exp $
# Convert PDF to encapsulated PostScript.
# usage:
# pdf2eps <page number> <pdf file without ext>

pdfcrop $2.pdf
pdftops -f $1 -l $1 -eps "$2-crop.pdf" 
rm  "$2-crop.pdf"
mv  "$2-crop.eps" $2.eps

这是我所做的,但我认为这是错误的

  1. sudo vim /usr/local/bin/pdf2eps.sh
  2. 在那里复制粘贴代码。
  3. sudo chmod 777 /usr/local/bin/pdf2eps.sh
  4. rehash
  5. 您会看到该脚本位于pdf2eps.sh您的 PATH 中。

我不喜欢这里的事情

  • 运行vimsudo
  • my 中的其他内容/usr/local/bin/是符号链接,而不是文件本身;表明我在这里做错事

如何正确/安全地将脚本添加到您的路径?

答案1

vim运行起来并没有什么问题sudo。这是在需要 root 访问权限的目录中创建文件的正确方法。至于其余文件,同样有链接,这不是问题。如果这让您感觉更好,您可以改为在 中创建脚本,/usr/bin但在/usr/local/bin.事实上,根据文件系统层次结构标准:

/usr/local 层次结构供系统管理员在本地安装软件时使用。当系统软件更新时,它需要确保不被覆盖。它可用于可在一组主机之间共享但在 /usr 中找不到的程序和数据。

本地安装的软件必须放置在 /usr/local 而不是 /usr 中,除非安装它是为了替换或升级 /usr 中的软件。[28]

因此,如果您想遵循 FSH,您应该将您手动安装的所有内容放在 下/usr/local,所以您做了正确的事情。

现在,如果您不需要该.sh扩展,只需将其删除即可。它在 *nix 系统上不起作用:

sudo mv /usr/local/bin/pdf2eps.sh /usr/local/bin/pdf2eps

您的脚本现在将位于您的$PATHas中pdf2eps


但是,您应该做的是修复脚本的一些问题,如果在包含空格或其他奇怪字符的文件名上运行,这些问题会导致脚本失败。修改如下:

#!/bin/sh
# http://tex.stackexchange.com/a/20886/13173
# $Id: pdf2eps,v 0.01 2005/10/28 00:55:46 Herbert Voss Exp $
# Convert PDF to encapsulated PostScript.
# usage:
# pdf2eps <page number> <pdf file without ext>

if [ $# -ne 2 ]; then
    echo "Exactly 2 filenames are needed"
    exit 1
fi

pdfcrop "$2.pdf"
pdftops -f "$1" -l "$1" -eps "$2-crop.pdf"
rm  "$2-crop.pdf"
mv  "$2-crop.eps" "$2.eps"

相关内容