Bash
用於創建嵌入值的腳本的 Bash 腳本
su "$uname" -c "cat > ~/scripts/syncdownloads.sh <<ENDMASTER "#!/bin/bash" login="$flogin" pass="$fpass" host="$fhost" remote_dir="$fremote_dir" local_dir="$flocal_dir" base_name="$(basename "$0")" lock_file="/tmp/$base_name.lock" trap "rm -f $lock_file exit 0" SIGINT SIGTERM if [ -e "$lock_file" ] then echo "$base_name is running already." exit else touch "$lock_file" lftp -p 22 -u "$login","$pass" sftp://"$host" << EOF set sftp:auto-confirm yes set mirror:use-pget-n 5 mirror -c -P5 "$remote_dir" "$local_dir" quit EOF rm -f "$lock_file" trap - SIGINT SIGTERM exit fi ENDMASTER"
以上是我的程式碼的一部分,基本上我想要一種方法來在使用者輸入的文件頂部插入值(從
login
到local_dir
),然後將其餘行保留到ENDMASTER
語句與它們現在完全一樣。我試過單獨註釋每一行,並加上單引號和雙引號,但是當我執行 bash 腳本時,它總是從頭
base_name
開始完成命令,而當我打開生成的文件時,其餘部分在trap
.我是 bash 的新手,所以任何幫助都將不勝感激,因為我在網上找不到任何相關的東西。
關閉此處文件中的參數替換如何?(有關更多詳細資訊,請參見www.tldp.org 上的範例 19-7。)
也許你的腳本看起來會更好(儘管它仍然很密集):
su "$uname" -c "cat > ~/scripts/syncdownloads.sh << 'ENDMASTER' ###### Using `$()` to create a sub shell so that we don't have to escape ###### special characters. $( ###### The parameter substitution is on here cat <<INNERMASTER #!/bin/bash login="$flogin" pass="$fpass" host="$fhost" remote_dir="$fremote_dir" local_dir="$flocal_dir" INNERMASTER ###### No parameter substitution cat <<'INNERMASTER' base_name="$(basename "$0")" lock_file="/tmp/$base_name.lock" trap "rm -f $lock_file exit 0" SIGINT SIGTERM if [ -e "$lock_file" ] then echo "$base_name is running already." exit else touch "$lock_file" lftp -p 22 -u "$login","$pass" sftp://"$host" << EOF set sftp:auto-confirm yes set mirror:use-pget-n 5 mirror -c -P5 "$remote_dir" "$local_dir" quit EOF rm -f "$lock_file" trap - SIGINT SIGTERM exit fi INNERMASTER ) ENDMASTER"
這樣你就不必逃避任何事情。