我一直在閱讀Unix編程環境 &執行包含的練習。我明白這項工作有點過時,但我發現它是一個很好的資源。努力從Unix編程環境重現終端(1983)
在第一章中,有幾個練習,其中向讀者介紹與終端&的交互,要求解釋交互。這裏是一個例子:
練習1-1。解釋與
$ date\@
在文本發生了什麼,它解釋了@
被解釋爲行刪除字符。我的系統上的等價物是^u
,但我可以用stty kill @
模仿書中的終端。
基於閱讀&我的直覺,我希望的date\@
調用的東西返回的效果:
[email protected]: command not found
文本支持這樣一個道理:
如果您之前任
#
或@
由反斜槓\
,它失去了它的特殊含義。所以要輸入#或@,輸入\#
或\@
。
我的問題是,我甚至無法在我的終端中鍵入示例。只要我輸入@
,該行就會被刪除。反斜槓看起來並不會逃避行消除字符。
假設我對轉義字符如何與終端控制字符交互是正確的,我如何設置我的系統(Ubuntu GNU/Linux)來模擬文本行爲?
這裏是另一個類似的活動:
練習1-2。大多數shell(儘管不是第7版shell)將
#
解釋爲引入註釋,並忽略從#
到行尾的所有文本。鑑於此,解釋以下成績單,假設你的擦除字符也#
:
$ date
Mon Sep 26 12:39:56 EDT 1983
$ #date
Mon Sep 26 12:40:21 EDT 1983
$ \#date
$ \\#date
#date: not found
$
設置爲#
我刪除字符,這是不可能複製這個成績單。反斜槓似乎不會轉義擦除字符。
恐怕這不能回答我的問題。我知道如何恢復我的終端的原始行爲。我想知道爲什麼用反斜槓轉義_line kill_字符似乎沒有任何作用。 – r1b
,因爲終端首先讀取行消除字符。不要讓shell讀取。你跟終端通話,終端與shell進行通話。如果你告訴終端殺死一條線路,它不會將線路發送到外殼。 –
該文本表明內核中有另一種解釋反斜槓的機制:_「當擦除或行殺字符前面加上反斜槓時,內核丟棄反斜槓並保留下列字符而不解釋」_「。這不再是這種情況嗎?有什麼辦法可以模仿這種行爲嗎? – r1b