Shell

在 /usr/local/bin 中安裝 .sh 腳本的安全方法?

  • December 28, 2019

我想在 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 中看到該腳本。

我不喜歡這裡的東西

  • 執行vim_sudo
  • my 中的其他內容/usr/local/bin/是符號連結,而不是文件本身;表明我在這裡做錯了

如何正確/安全地將腳本添加到您的 PATH?

vim與一起執行沒有任何問題sudo。這是在需要 root 訪問權限的目錄中創建文件的正確方法。至於其餘的文件有連結,同樣,這不是問題。如果它讓您感覺更好,您可以/usr/bin改為在其中創建腳本,但在/usr/local/bin. 事實上,根據Filesystem Hierarchy Standard

/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"

引用自:https://unix.stackexchange.com/questions/280828