Shell
在 /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
這是我所做的,但我認為這是錯誤的
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/
是符號連結,而不是文件本身;表明我在這裡做錯了如何正確/安全地將腳本添加到您的 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
您的腳本現在將在您的
$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"