Bashスクリプトの配列要素は、何らかのエンコードエラーのため、nanoのファイル名としては使用できません。

Bashスクリプトの配列要素は、何らかのエンコードエラーのため、nanoのファイル名としては使用できません。

私はディレクトリを再帰的に検索し、特定の文字列を見つけて、その特定のファイルでその文字列を開くbashスクリプトを作成しています。

私がこの関数を呼び出すexert理由は、私のソフトウェアで特定の変数を見つけるのに苦労しているからです。たとえば、私のウェブサイトでdivに「I like big cats」などのフレーズを使用し、そのdivを編集したい場合は、「exert 'I like big cats」を入力すると、そのdivを含むファイルが開きます。 divの正確な位置。

これは私のコードです。

#!/bin/bash
echo "Searching for $1"
echo "----Inside files----"
grep --color=always  -nr "$1" * > /tmp/tmpsearch; #searches for ' I like big cats'
filesNew=`cat /tmp/tmpsearch` #stores it in a variable that can be split - future version will keep this in memory 
readarray -t files <<<"$filesNew" #it is split to an array called $files
x=0;
IFS=":"; #":" is the string delimter for grep's output of files with the string, alongside the line number the string is found inside the file 
for i in "${files[@]}"; do
    #The colon operator separates grep's output of line numbers and files that contain the string 'I like big cats'
    read -ra FOUND <<< "$i" 
    x=$[$x+1];
    printf "Found index: $x\n"
    line=`echo "${FOUND[1]}"`
    file=`echo "${FOUND[0]}"`

    nano +$line ./$file #This should open nano at the exact line number 

done
exit 1

すべてがうまくいきますが、nanobashスクリプトで配列出力呼び出しを使用するとエンコードエラーが説明されているようです。

bashscriptの文字列は大丈夫ですが、nano./app.vue./^[[35m^[[Kapp.vue^[[m^[[K^[[36m^[[K。ファイル名の周りに削除できないコマンド文字がたくさんあります。

nano app.vue有効なスクリプトの先頭に配置すると、nanojust または just の問題ではなく、bash配列出力 (grep で文字列が分割されている) の使用に問題があることがわかります。

ベストアンサー1

色指定文字列は次のとおりです。 ^[ は ESC、[..m は端末の前景色などです。

grep --color=never 設定

おすすめ記事