2011-10-19 37 views
2

bashスクリプトでファイルに行を書き込むにはどうすればよいですか?私は~/.inputrcbashスクリプトを使用してファイルに行を書き込む

"\e[A": history-search-backward 
"\e[B": history-search-forward 
"\e[C": forward-char 
"\e[D": backward-char 

ファイルに以下を書きたい

は現在、私はこの作業が、やや醜い方法を持っている、と私はより良い方法があるはずと確信しています。

#!/bin/sh 
echo \"\\e[A\": history-search-backward > ~/.inputrc 
echo \"\\e[B\": history-search-forward >> ~/.inputrc 
echo \"\\e[C\": forward-char >> ~/.inputrc 
echo \"\\e[D\": backward-char >> ~/.inputrc 
+0

があり、このようなことをやってのさまざまな方法の数十は常にありますが、あなたがここに持っていることは、おそらく最良の方法に、最も簡単なように見えますそれをやる。 – chown

答えて

10

A少し簡単な方法は、次のようになります:

cat > ~/.inputrc << "EOF" 
"\e[A": history-search-backward 
"\e[B": history-search-forward 
"\e[C": forward-char 
"\e[D": backward-char 
EOF 

あなたががこれを実行する必要がある理由私は好奇心が強い

はここで冗長性を低減するための一つの方法です。特定のテキストを含むファイルを設定する場合は、スケルトンファイルを作成して/etc/skelにダンプする必要があります。その後、あなたのスクリプトにcp /etc/skel/.inputrc ~/.inputrcすることができます。

+0

これは機能しますが、構文を説明できますか? –

+1

@JonathanLin [here doc](http://tldp.org/LDP/abs/html/here-docs.html)です。それは、あなたにコマンドの一部(この場合はcat)のstdinに任意のテキストを送り、それを処理させることができます。 'EOF'は、テキストがいつ完成したかを示すために使われます。それ以外の場合は、単にファイルを書き込むcatコマンドです。 –

0

これはかなりです。

TEXT="\"\\e[A\": history-search-backward 
\"\\e[B\": history-search-forward 
\"\\e[C\": forward-char 
\"\\e[D\": backward-char" 

echo "$TEXT" > ~/.inputrc 
+0

'$ TEXT 'は必要ありません。ただ 'echo" [multiple lines] ">〜/ .inputrc'です。 –

+0

あなたのバージョンは '$ TEXT'を二重引用符で囲まないと動作しません(私はそれらを追加しました)。投稿する前にコードをテストするか、テストされていないと言います。 –

3

使用here document

#!/bin/bash 
cat >~/.inputrc <<EOF 
"\e[A": history-search-backward 
"\e[B": history-search-forward 
"\e[C": forward-char 
"\e[D": backward-char 
EOF 

これはあなたのシェルスクリプトでデータをインラインで置くことができます。文字列EOFは任意の値にすることができます。したがって、入力行に単独で表示されない文字列を選択するだけです。

2

単純な文字列以外のコマンドにechoコマンドを使用すると、複雑で移植性がない場合があります。 echo(coreutilsの一部)のGNUバージョン、MacOSでおそらく見つかるBSDバージョン、そしてほとんどのシェルには組み込みコマンドとしてechoがあります。これらの異なるバージョンでは、オプションのコマンドラインオプション(末尾の改行を禁止するには-n、バックスラッシュエスケープを有効または無効にするには-c/-Cを有効にする)とエスケープを微妙に異ならせることができます(エスケープ文字の場合は\e) 。

printfレスキュー

printf/usr/bin/printfおよび/または/bin/printfとして、おそらく利用可能であり、また内蔵の一部のシェルでは(bashのとzshのとにかく)ですが、その振る舞いははるかに一貫性があります。

ご例えば

Here's the GNU coretuils printf documentation.

、あなたが書くことができる:

(
    printf '"\e[A": history-search-backward\n' 
    printf '"\e[B": history-search-forward\n' 
    printf '"\e[C": forward-char\n' 
    printf '"\e[D": backward-char\n' 
) > ~/.inputrc 
関連する問題