
假設,我確實使用此功能歸檔了多個文件:
gen_password ()
{
gpg --gen-random 1 "$1" | perl -ne'
s/[\x00-\x20]/chr(ord($^N)+50)/ge;
s/([\x7E-\xDB])/chr(ord($^N)-93)/ge;
s/([\xDC-\xFF])/chr(ord($^N)-129)/ge;
print $_, "\n"'
}
archive ()
{
ARCHIVE_NAME="$1"
PASSWORD=$(gen_password 32)
7za a -p"$PASSWORD" -mhe -- "$ARCHIVE_NAME" "$@"
echo "Created 7z archive with password '$PASSWORD'"
}
這效果很好,我嘗試上傳加密存檔檔案共享伺服器。
所以有將文件內容上傳到伺服器的腳本(來源):
upload()
{
if [ $# -eq 0 ]; then echo "No arguments specified. Usage:\necho transfer /tmp/test.md\ncat /tmp/test.md | transfer test.md"; return 1; fi
tmpfile=$( mktemp -t transferXXX ); if tty -s; then basefile=$(basename "$1" | sed -e 's/[^a-zA-Z0-9._-]/-/g'); curl --progress-bar --upload-file "$1" "https://transfer.sh/$basefile" >> $tmpfile; else curl --progress-bar --upload-file "-" "https://transfer.sh/$1" >> $tmpfile ; fi; cat $tmpfile; rm -f $tmpfile;
}
所以我試著以天真的方式傳送加密檔案:
archive 1.rar pass.tar.gz d7432.png foo.7z | upload
但有一個問題 - 無法存取加密的存檔,upload
並且命令退出時沒有任何結果。
所以,問題是:我應該如何透過管道傳輸文件以使其正確上傳?
答案1
由於您的 upload() 函數需要一個參數 ($1) 作為存檔檔名,因此請在命令列中傳遞它:
archive foo.7z 1.rar pass.tar.gz d7432.png && upload foo.7z
如果 foo.7z 也是 archive() 的變數參數,只需將相同的變數傳遞給 upload() 即可:
archive $archivename 1.rar pass.tar.gz d7432.png && upload $archivename
我會推薦使用&&
glue,因為如果 archive() 函數沒有成功,您可能不想嘗試上傳存檔檔案。
這是 的範例函數.bashrc
:
share()
{
ARCHIVE_NAME="$1"
archive "$ARCHIVE_NAME" "$@" && upload "$ARCHIVE_NAME"
}