我最近升級到新的Android SDK,並且發現了一些非常非常麻煩的事情。看起來在shell中使用命令歷史是不可能的。你注意到了嗎? Android外殼對我來說似乎很糟糕,但至少在最後一個SDK中,我有命令歷史記錄。現在,似乎按下向上/向下箭頭,導致一些代碼寫在提示符上(類似^ [[A,^ [[B等...)。我試着讀一點,但我發現很少有人問這個答案。任何想法爲什麼會發生這種情況以及如何解決這個問題如何在Linux下使用向上/向下鍵啓用Android adb shell歷史記錄?
回答
如果按Ctrl - p仍然給您以前的歷史記錄條目,那麼它可能是箭頭鍵綁定成了某種原因。試試這個:
bind '"\e[A": previous-history'
bind '"\e[B": next-history'
如果使鍵的作用的箭頭,你可以把它持續加入這兩行/etc/inputrc
或~/.inputrc
:
"\e[A": previous-history
"\e[B": next-history
最後我用它的Android外殼沒有使用readline,但後來我不記得它提供任何形式的命令行版本,包括歷史箭頭。 – Gilles 2010-12-18 15:49:43
@Gilles:我自己也沒有用過它,但我只是根據OP的說法做出回答。 – 2010-12-18 16:46:08
Ctrl-P給我的歷史,但不是在Android的外殼。但是,我必須在哪裏嘗試綁定命令?在Linux shell中?我在那裏試了一下,這使得箭頭無法在歷史中移動。如果我嘗試在Android shell中,命令綁定似乎不存在。任何想法? – 2010-12-19 12:03:46
您可以運行裏面rlwrap外殼:
rlwrap adb shell
我更喜歡自己在Emacs shell緩衝區中運行它,如果您對Emacs沒有過敏,我建議您使用它。 Emacs對於運行adb logcat
也很好:你會得到一個可搜索的歷史記錄,並且消息會隨着它們更新而更新,並且你可以很容易地將有趣的圖案放入顏色中(M-x highlight-regexp
和朋友)。
我試過了你給我的命令,但我看不到有任何改變。外殼完全相同。也許我做錯了什麼?謝謝! – 2010-12-19 12:06:09
@Luca:我使用adb和Gingerbread SDK下的模擬器獲得基本的命令行版本,而'rlwrap'則是readline版本。我似乎記得'rlwrap'不能用於以前的SDK版本,但我不記得哪個版本。 – Gilles 2010-12-21 21:04:30
我不明白...我只是再試一次,但我真的看不到變化。 – 2010-12-25 11:08:59
如果你在談論真實設備(而不是仿真器),你應該嘗試一些非官方的固件,如Cyanogenmod - 它包括更好的二進制工具,比如更多功能的shell,一套常規的UNIX工具,ssh服務器等。
如果你正在談論仿真器,你可以從固件中提取這些二進制文件,並按原樣(使用存儲卡映像)將其推入仿真器。
我正在談論一個真實的設備,這個問題與固件無關。它在我升級到同一設備上的最後一個SDK 2.3時開始。 – 2010-12-19 00:39:48
無論如何,我只是檢查,它也發生在模擬器上。 – 2010-12-19 12:01:10
好吧,我明白了。那麼至少你可以嘗試使用ssh進行連接(即你的設備上的dropbear ssh服務器和你的開發盒中的ssh客戶端)作爲解決方法。 – GreyCat 2010-12-19 19:29:29
幸運的是,在Android 7中(以及可能更早)並非如此。 – 2017-10-31 10:57:59