![在 /usr/local/bin 中安装 .sh 脚本的安全方法?](https://linux22.com/image/7315/%E5%9C%A8%20%2Fusr%2Flocal%2Fbin%20%E4%B8%AD%E5%AE%89%E8%A3%85%20.sh%20%E8%84%9A%E6%9C%AC%E7%9A%84%E5%AE%89%E5%85%A8%E6%96%B9%E6%B3%95%EF%BC%9F.png)
我想在 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
这是我所做的,但我认为这是错误的
sudo vim /usr/local/bin/pdf2eps.sh
- 在那里复制粘贴代码。
sudo chmod 777 /usr/local/bin/pdf2eps.sh
rehash
- 您会看到该脚本位于
pdf2eps.sh
您的 PATH 中。
我不喜欢这里的事情
- 运行
vim
与sudo
- 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
您的脚本现在将位于您的$PATH
as中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"