bashプロンプトを.bashrcの他のプロンプトに自動的に切り替えたいと思います。
元の文字列:
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;31m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
置換文字列:
IPeth0=$(Adr=$(ifconfig eth0 |grep inet); echo $Adr | awk '{print $2}' | cut -c 6- )
PS1='\d \t \[\e[0;31m\]\u@$IPeth0\[\e[0;32m\]:\[\e[0;36m\]\w# \[\e[m\] '
このためにbashを書くための多くの誤った試みの1つは次のとおりです。
#!/bin/bash
original="PS1='${debian_chroot:+($debian_chroot)}\[\033[01;31m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '"
replacement="PS1='\d \t \[\e[0;31m\]\u@$IPeth0\[\e[0;32m\]:\[\e[0;36m\]\w# \[\e[m\] '"
ipvar="IPeth0=$(Adr=$(ifconfig eth0 |grep inet); echo $Adr | awk '{print \$2}' | cut -c 6- )"
cp ~/.bashrc ~/.bashrc.bak
sed -e 's/$original/$replacement/g' ~/.bashrc
sedで '\'、 '/'、および '&'をエスケープする必要があることを知っているので、すべての文字を二重エスケープしてみました。私はこの問題を理解できないようです。
最初の回線を交換できなかったため、IP回線をすぐに接続しようとしました。
このタイプの自動化のためのより良い方法がある場合はお知らせください。
答え1
以下はいくつかの方法です(2.5)。
PS1
共通のテンプレートに従うように設定を段階的に変更することに興味がある場合は、- その行のみを含むファイルを作成します
PS1=…
。 sed
たとえば、セクションごとに編集するコマンドを作成します。sed -e 's/${debian_chroot:+($debian_chroot)}/\\d \\t /'
sed -e 's/\\033/\\e/g'
- など。
- より小さくシンプルなコマンドをデバッグする方が簡単かもしれません。すべてのタスクが完了すると、すべてのタスクを1つにリンクするのが簡単になります。
あなた見ているの価値
$original
?たとえば、終わりましたか
printf "%s\n" "$original"
?あなたが次のようなことを言うとき、これだけを覚えておいてください。"The quick brown fox 'jumps over' the lazy dog."
完全な文字列は次の場所にあります。ダブル引用符。だからあなたが言うとき
"Humpty '$var' Dumpty"
$var
二重引用符で囲まれているので拡張されます。それでは文字列を見てください
original
。original="PS1='${debian_chroot:+($debian_chroot)}\[\033[01;31m\]\u@\h\[\033[00m\]:…"
${debian_chroot:+($debian_chroot)}
そのように割り当てると、範囲が拡張されます。だからこれは問題です。
- その行のみを含むファイルを作成します
すでに存在する値に新しい値を変更するには、キツネ像を削り、犬の像を作成する
PS1
ために粘土を追加しないで、「sed
」を使用して既存の割り当てを削除して置き換えます。秒c
(氏hange) コマンドは、1 つ以上のラインセットを 1 つ以上のラインセットに置き換えます。sed -e $'/^PS1=/c\ IPeth0=$(Adr=$(ifconfig eth0 |grep inet); echo $Adr | awk \'{print $2}\' | cut -c 6- )\ PS1=\'\d \t \[\e[0;31m\]\u@$IPeth0\[\e[0;32m\]:\[\e[0;36m\]\w# \[\e[m\] \''
生の文字を文字列に入れることができるように、コマンド文字
sed
列全体をここに配置しました。必要に応じて検証済みの方法を使用できます。$'…'
\'
'
'$not_a_variable …'"… please don't try to expand those …"'… $not_a_variable'
(代替参照)技術。
上記の変形は
sed -e $'/^PS1=/{s/^/# /; a\ IPeth0=$(Adr=$(ifconfig eth0 |grep inet); echo $Adr | awk \'{print $2}\' | cut -c 6- )\ PS1=\'\d \t \[\e[0;31m\]\u@$IPeth0\[\e[0;32m\]:\[\e[0;36m\]\w# \[\e[m\] \' }'
既存の定義(
s/^/# /
)をコメントアウトするㅏ新しい行を追加するには、このコマンドを使用しますa
。