當前位置:首頁 » 編程軟體 » 腳本回退

腳本回退

發布時間: 2022-08-03 05:15:46

A. linux shell 腳本讀取用戶輸入的參數如何解決

while read var
do
echo $var
done
這樣也是可以的,沒錯。
想回退的話用 ctrl+backspace

B. linux shell腳本讀取用戶輸入的參數

$# 是傳給腳本的參數個數

$0 是腳本本身的名字
$1是傳遞給該shell腳本的第一個參數
$2是傳遞給該shell腳本的第二個參數
$@ 是傳給腳本的所有參數的列表

例如:

#!/bin/sh
echo "arg_num: $#"
echo "shell_name: $0"
echo "first_arg : $1"
echo "second_arg : $2"
echo "args : $@"

C. 如何使用Docker構建運行時間較長的腳本

問題
讓我們從這個我試圖解決的問題開始。我開發了一個會運行很長時間的構建腳本,這個腳本中包含了很多的步驟。
這個腳本會運行1-2個小時。
它會從網路下載比較大的文件(超過300M)。
後面的構建步驟依賴前期構建的庫。
但最最煩人的是,運行這個腳本真的需要花很長的時間。
文件系統是固有狀態
我們一般是通過一種有狀態的方式與文件系統進行交互的。我們可以添加、刪除或移動文件。我們可以修改文件的 許可權或者它的訪問時間。大部分獨立的操作都可以撤銷,例如將文件移動到其它地方後,你可以將文件恢復到原來的位置。但我們不會通過快照的方式來將它恢復到 原始狀態。這篇文章我將會介紹如何在耗時較長的腳本中充分利用快照這一特性。
使用聯合文件系統的快照
Docker使用的是聯合文件系統叫做AUFS(譯者註:簡單來說就是支持將不同目錄掛載到同一個虛擬文件系統下的文件系統)。聯合文件系統實現了Union mount。顧名思義,也就是說不同的文件系統的文件和目錄可以分層疊加在單個連貫文件系統之上。這是通過分層的方式完成的。如果一個文件出現在兩個文件系統,那最高層級的文件才會顯示(該文件其它版本也是存在於層級中的,不會改變,只是看不到的)。
在Docker中,每一個在Union mount轉哦給你的文件系統都被稱為layers(層)。使用這種技術可以輕松實現快照,每個快照都是所有層的一個Union mount。
生成腳本的快照
使用快照可以幫助構建一個長時運行的腳本。總的想法是,將一個大的腳本分解為許多小的腳本(我喜歡稱之為 scriptlets),並單獨運行這些小的腳本,腳本運行後為其文件系統打一個快照 (Docker會自動執行此操作)。如果你發現一個scriptlet運行失敗,你可以快速回退到上次的快照,然後再試一次。一旦你完成腳本的構建,並且 可以保證腳本能正常工作,那你就可以將它分配給其它主機。
回過頭來再對比下,如果你沒有使用快照功能了?當你辛辛苦苦等待了一個半小時後,腳本卻構建失敗了,我想除了少部分有耐心的人外,很多人是不想再來一次了,當然,你也會盡最大努力把系統恢復到失敗前的狀態,比如可以刪除一個目錄或運行make clean。
但是,我們可能沒有真正地理解我們正在構建的組件。它可能有復雜的Makefile,它會把把文件放到文件系統中我們不知道的地方,唯一真正確定的途徑是恢復到快照。
使用快照構建腳本的Docker
在本節中,我將介紹我是如何使用Docker實現GHC7.8.3 ARM交叉編譯器的構建腳本。Docker非常適合做這件事,但並非完美。我做了很多看起來沒用的或者不雅的事情,但都是必要的,這都是為了保證將開發腳本的總時間降到最低限度。構建腳本可以在這里找到。
用Dockerfile構建
Docker通過讀取Dockerfile來構建鏡像。Dockerfile會通過一些命令來具體指定應該執行哪些動作。具體使用說明可以參考這篇文章。在我的腳本中主要用到WORKDIR、ADD和RUN。ADD命令非常有用因為它可以讓你在運行之前將外部文件添加到當前Docker鏡像中然後轉換成鏡像的文件系統。你可以在這里看到很多scriptlets構成的構建腳本。
設計
1. 在RUN之前ADD scriptlets
如果你很早就將所有的scriptletsADD在Dockerfile,您可能會遇到以下問題:如果你的腳本構建失敗,你回去修改scriptlet並再次運行docker build。但是你發現,Docker開始在首次加入scriptlets的地方構建!這樣做會浪費了大量的時間並且違背了使用快照的目的。
出現這種情況的原因是由於Docker處理它的中間鏡像(快照)的方式。當Docker通過Dockerfile構建鏡像時,它會與中間鏡像比較當前命令是否一致。然而,在ADD命令的情況下被裝進鏡像的文件里的內容也會被檢查。如果相對於現有的中間鏡像,文件已經改變,那麼Docker也別無選擇,只能從這點開始建立一個新的鏡像。因為Docker不知道這些變化會不會影響到構建。
此外,使用RUN命令要注意,每次運行時它都會導致文件系統有不同的更改。在這種情況下,Docker會發現中間鏡像並使用它,但是這將是錯誤的。RUN命令每次運行時會造成文件系統相同的改變。舉個例子,我確保在我的scriptlets我總是下載了一個已知版本的文件與一個特定MD5校驗。
對Docker 構建緩存更詳細的解釋可以在這里找到。
2.不要使用ENV命令來設置環境變數,請使用scriptlet。
它似乎看起來很有誘惑力:使用ENV命令來設置所有構建腳本需要的環境變數。但是,它不支持變數替換的方式,例如 ENV BASE=$HOME/base 將設置BASE的值為$HOME/base著很可能不是你想要的。
相反,我用ADD命令添加一個名為set-env.sh文件。此文件會包含在後續的scriptlet中:
THIS_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
source $THIS_DIR/set-env-1.sh
如果你沒有在第一時間獲取set-env.sh會怎麼樣呢?它很早就被加入Dockerfile並不意味著修改它將會使隨後的快照無效?
是的,這會有問題。在開發腳本時,我發現,我已經錯過了在set-env.sh添加一個有用的環境變數。解決方案是創建一個新的文件set-env-1.sh包含:
THIS_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
source $THIS_DIR/set-env.sh
if ! [ -e "$CONFIG_SUB_SRC/config.sub" ] ; then
CONFIG_SUB_SRC=${CONFIG_SUB_SRC:-$NCURSES_SRC}
fi
然後,在所有後續的scriptlets文件中包含了此文件。現在,我已經完成了構建腳本,我可以回去解決這個問題了,但是,在某種意義上,它會破壞最初的目標。我將不得不從頭開始運行構建腳本看看這種變化是否能成功。
缺點
一個主要缺點是這種方法是,所構建的鏡像尺寸是大於它實際需求的尺寸。在我的情況下尤其如此,因為我在最後刪除了大量文件的。然而,這些文件都仍然存在於聯合掛載文件系統的底層文件系統內,所以整個鏡像是大於它實際需要的大小至少多餘的是刪除文件的大小。
然而,有一個變通。我沒有公布此鏡像到Docker Hub Registry。相反,我:
使用docker export導出內容為tar文件。
創建一個新的Dockerfile簡單地添加了這個tar文件的內容。
產生尺寸盡可能小的鏡像。
結論
這種方法的優點是雙重的:
它使開發時間降至最低,不再做那些已經構建成功的子組件。你可以專注於那些失敗的組件。
這非常便於維護構建腳本。構建可能會失敗,但只要你搞定Dockerfiel,至少你不必再從頭開始。
此外,正如我前面提到的Docker不僅使寫這些構建腳本更加容易,有了合適的工具同樣可以在任何提供快照的文件系統實現。

D. 網頁輸入文本中按退格鍵會回退網頁,游標一直在網頁文本框里,這怎麼處理啊

「輸入刪除」這樣的一個事件,在瀏覽網頁時,瀏覽器會試圖先將事件交給網頁中的對象來處理(如腳本),如果網頁中的對象未及時處理事件(或者瀏覽器不知道其已經處理了),那事件就會被廣播到瀏覽器自身這里,讓瀏覽器做默認處理。

應該是網頁本身的腳本出現了問題,它不接受退格鍵輸入(不讓刪除),卻又忘了處理「刪除」鍵事件的廣播 (在普通網頁中或者當游標沒有在文本框中時,按刪除時會導致頁面後退),於是刪除事件順利到達瀏覽器處理,執行返回頁面。

游標一直停在網頁文本框里可能是網頁的腳本執行的結果。
如果不運行腳本並不影響你使用該網頁,建議你暫時關閉腳本的功能。

E. FLASH腳本語言里的enterFrame是什麼意思

我想您一定已經知道如何向幀和按鈕中添加腳本,下面需要知道如何向影片剪輯中添加腳本:

要為影片剪輯添加腳本,首先要選中影片剪輯,再打開它對應的動作面板,然後在其中輸入腳本。影片剪輯腳本和按鈕的腳本類似,它們都使用事件處理函數,與按鈕的on關鍵字不同,影片剪輯使用 onClipEvent關鍵字。當某種影片剪輯事件發生時,就會觸發相應的事件處理函數。

影片剪輯最重要的兩種事件是load和enterFrame,這個兩個事件感覺看著很簡單,但是你真的明白嗎?(說實話,我剛開始學的時候,就好長時間不明白,我每次都試這個不對,在試另外的一個,今天有人有也問到了這個問題,我就寫出來給大家一起分享吧!很明白的,就當作復習吧,要不就直接不用看了,不明白的,就好好的看看,有什麼疑問,留言告訴給我們,好嗎?)load事件在影片剪輯完全載入到內存中時發生。在每次播放Flash影片時,每個影片剪輯的load事件只發生一次。

在主時間軸停止播放時,影片中的影片剪輯並不會停止播放,這個特性決定了影片剪輯的另一個事件enterFrame的重要性。enterFrame事件在影片每次播放到影片剪輯所在幀時發生。如果主時間軸中只有一幀,且不論它是否在該幀停止,該幀中的影片剪輯都會不斷觸發enterFrame事件,且觸發的頻率與Flash影片的幀頻一致。

影片剪輯事件的使用方法如下所示:

onClipEvent (load) {
var i = 0;
}
onClipEvent (enterFrame) {
trace(i);
i++;
}

當影片剪輯的load事件發生時,將變數i設置為0。當影片剪輯的enterFrame事件發生時,向輸出窗口中發送i的值,然後將i加1。輸出窗口中會從0開始輸出以1遞增的數字序列,直到影片被關閉為止。

為了熟悉影片剪輯事件處理函數的用法,我們來為影片剪輯編寫一段簡單的腳本,使影片剪輯逆序播放,我們將從影片剪輯的最後一幀處開始播放,使用prevFrame命令使影片剪輯每次後退一幀。

本例文件場景中有一個影片剪輯元件rollmc,查看一下它的屬性面板,並沒有為其實例命名,這是因為我們要直接在影片剪輯的動作面板中添加腳本,並不需要用到實例名稱。

選中影片剪輯rollmc,此時動作面板的標題欄中應為「動作-影片剪輯」。打開動作面板,其中添加了如下ActionScript:

onClipEvent (load) {
gotoAndStop(40);
}
onClipEvent (enterFrame) {
prevFrame();
}

在事件處理函數onClipEvent (load)中,令Flash影片的播放頭轉到影片剪輯的第40幀(即最後一幀)。這個事件處理函數只在影片剪輯被載入完成時執行1次。第2個事件處理函數onClipEvent (enterFrame)每播放1幀就執行1次,使影片剪輯回退1幀。

按Ctrl+Enter鍵測試影片,你將看到齒輪以與上例相反的方向轉動,直到影片剪輯的時間軸回到第1幀,prevFrame命令不起作用,影片剪輯停止播放。要讓它連續不斷的播放,可以在影片剪輯元件rollmc的時間軸第1幀的動作面板中添加如下語句:

gotoAndStop(40);

F. WIN10的「腳本錯誤」

注冊IE組件

1、使用快捷鍵「Win+R」彈出【運行】,輸入「regsvr32 Actxprxy.dll」,點擊【確定】:

2、再用同樣的方式,使用快捷鍵「Win+R」彈出【運行】,輸入「regsvr32 Shdocvw.dll」,點擊【確定】即可:

3、若注冊以上組件仍然提示,需重復以上步驟後再注冊下面的組件:

regsvr32 Mshtml.dll

regsvr32 Urlmon.dll

regsvr32 Browseui.dll

regsvr32 Oleaut32.dll

regsvr32 Shell32.dll

G. finereport 使用超級鏈接到另外一個報表後怎麼回退

無論是FR還是什麼其他報表,如果自身控制項不提供回退功能的話,可以自己手動加上A標簽,href設置為 javascript:window.history.go(-1);就能返回上一頁了。
但ActiveReports本身就自帶回退的toolbar,有功夫你可以用用這個。
http://www.gcpowertools.com.cn/procts/activereports_overview.htm

H. 如何進行版本回退或只是修改已提交的commit

同步程序思路:用戶提交程序到SVN,SVN觸發hooks,按不同的hooks進行處理,這里用到的是post-commit,利用post-commit到代碼檢出到SVN伺服器的本地硬碟目錄,再通過rsync同步到遠程的WEB伺服器上。知識點:1、SVN的hooks#start-commit提交前觸發事務#pre-commit提交完成前觸發事務#post-commit提交完成時觸發事務#pre-revprop-change版本屬性修改前觸發事務#post-revprop-change版本屬性修改後觸發事務通過上面這些名稱編寫的腳本就就可以實現多種功能了,相當強大。2、同步命令rsync的具體參數使用3、具有基個語言的編程能力bashpythonperl都可以實現post-commit具體實現細節post-commit腳本編輯文件:sudovim/home/svn/fitness/hooks/post-commit注意:編輯完成post-commit後,執行:sudochmod755post-commit內容:#!/bin/shexportLANG=zh_CN.UTF-8sudo/usr/bin/svnupdate/var/www/www--usernamemirze--password123456注意:svn倉庫文件夾的other必須要有執行許可權不然腳本無法執行。SVNupdate之前一定要先手動checkout一份出來,還有這里一定要添加用戶和密碼如果只是手動一樣會更新,但自動一樣的不行。

I. 在虛擬機linux上的oracle,啟動後語句輸入錯誤按backplace退回在寫就出現亂碼怎麼辦

如果在操作系統下也出現這樣的情況,可以在登錄後,手工打入 stty erase ^H (^H可以在按退回鍵的時候出現)這個是設置終端erase(即退回鍵)的替代符
如果操作系統下沒有問題,僅僅是sqlplus裡面出現,應該在設置用戶登錄腳本裡面時解決,詳情見下面的參考資料

J. 【網頁設計】如何做一個載入到某個網頁就自動退出並刷新的JavaScript腳本

1從history里獲取當前的訪問path 2 判斷並回退到上一個頁面即可。很簡單啊不知道是不是你要的。

熱點內容
sql能力 發布:2025-02-09 10:43:50 瀏覽:982
編譯framework 發布:2025-02-09 10:42:11 瀏覽:382
五子棋對戰演算法 發布:2025-02-09 10:12:19 瀏覽:713
php樹菜單 發布:2025-02-09 10:04:10 瀏覽:360
linux保存ip 發布:2025-02-09 10:04:10 瀏覽:24
四川霜狼伺服器怎麼樣 發布:2025-02-09 10:02:44 瀏覽:146
Vs中h編譯選項是灰的 發布:2025-02-09 10:01:59 瀏覽:558
安卓43怎麼升級44 發布:2025-02-09 09:51:33 瀏覽:464
美國雲伺服器快還是香港快 發布:2025-02-09 09:34:33 瀏覽:989
怎麼解壓qq文件 發布:2025-02-09 09:18:14 瀏覽:581