web-dev-qa-db-ja.com

xterm / shで「sh:$」\ 302 \ 211 ...「:コマンドが見つかりません」と表示されることがあるのはなぜですか?

'find ...'のような有効なコマンドを入力するだけで、次のような結果が返されることがありますが、これはまったく予期せず混乱を招きます(...は入力したコマンド名です)。

sh: $'\302\211...': command not found

いくつかの腐敗が起こっていると思います。プロンプトで色を使用していません。POSIXモードのBashシェルをshとして使用しています(chshから/bin/shなど-$Shellshです)。

何が起こっているのですか、そしてなぜこれが起こり続けるのですか?デバッグできるものはありますか?これは、xterm、または少なくとも2つの組み合わせというよりもshの問題だと思います。

コンテキスト用のファイル:

Arch Linuxx86-64で配布されている私の/etc/profile

# /etc/profile

#Set our umask
umask 022

# Set our default path
PATH="/usr/local/sbin:/usr/local/bin:/usr/bin"
export PATH

# Load profiles from /etc/profile.d
if test -d /etc/profile.d/; then
        for profile in /etc/profile.d/*.sh; do
                test -r "$profile" && . "$profile"
        done
        unset profile
fi

# Source global bash config
if test "$PS1" && test "$BASH" && test -r /etc/bash.bashrc; then
        . /etc/bash.bashrc
fi

# Termcap is outdated, old, and crusty, kill it.
unset TERMCAP

# Man is much better than us at figuring this out
unset MANPATH

私の/etc/shrcは、ログインしていないシェルの場合、起動時にshにファイルを解析させる方法として作成しました。これは、/etc/environmentENV=/etc/shrc行で設定されたENV変数を使用して実現されます。

PS1='\u@\H \w \$ '
alias ls='ls -F --color'
alias grep='grep -i --color'
[ -f ~/.shrc ] && . ~/.shrc

私の~/.profile、最初の仮想ttyからログインするときにXを起動しています:

[[ -z $DISPLAY && $XDG_VTNR -eq 1 ]] && exec xinit -- -dpi 111

私の~/.xinitc、ご覧のとおり、私はシステムをVirtualBoxゲストとして使用しています。

xrdb -merge ~/.Xresources

VBoxClient-all

awesome &

exec xterm

そして最後に、私の~/.Xresources、ここには派手なものはないと思います:

*faceName: Inconsolata
*faceSize: 10
xterm*VT100*translations: #override <Btn1Up>: select-end(PRIMARY, CLIPBOARD, CUT_BUFFER0)

xterm*colorBDMode: true
xterm*colorBD: #ff8000
xterm*cursorColor: S_red

~/.profileはとりわけ/etc/bash.bashrcを参照しているため、その内容は次のとおりです。

#
# /etc/bash.bashrc
#

# If not running interactively, don't do anything
[[ $- != *i* ]] && return

PS1='[\u@\h \W]\$ '
PS2='> '
PS3='> '
PS4='+ '

case ${TERM} in
  xterm*|rxvt*|Eterm|aterm|kterm|gnome*)
    Prompt_COMMAND=${Prompt_COMMAND:+$Prompt_COMMAND; }'printf "\033]0;%s@%s:%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"'

    ;;
  screen)
    Prompt_COMMAND=${Prompt_COMMAND:+$Prompt_COMMAND; }'printf "\033_%s@%s:%s\033\\" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"'
    ;;
esac

[ -r /usr/share/bash-completion/bash_completion   ] && . /usr/share/bash-completion/bash_completion

ちなみに、そのcaseステートメントが何をするのかはわかりませんが、少し疑わしいように見えますが、繰り返しになりますが、私は誰を知っていますか。

7
amn

Linuxスタイルのクリップボードからコマンドを最初に貼り付けようとしたときに発生します(Ctrl+Shift+V)それが機能しない場合は、マウスで貼り付けます。どうやら、キーボードの組み合わせは、コマンドの前に非表示の文字を挿入します。解決策は簡単です。キーボードを使用して貼り付けないでください。使用している場合は、を押してください。 Backspace マウスで貼り付ける前に。

7
Mark Jeronimus

0x89は手がかりを提供します:デフォルトでは eightBitInput リソース設定、xterm論理的に-入力8ビットコードをORして0-127から128にマップします- 255:

  • tab^Iは0x9であり、
  • 0x80とOR演算すると、奇数の0x89が得られます。

押すと同時に「メタ」キーを押さないことで問題を解決できます tab

eightBitInput機能は古く(1989年のX11R4から)、メタキー機能に対応しています。ずっと後に、それはUTF-8で動作するように変更されました パッチ#183-2003/12/26-XFree86 4.3.99.9

  • uTF-8モードでeightBitInputリソースの処理を変更して、値をUTF-8に変換します。それ以外の場合、不正なUTF-8コードがアプリケーションに送信されます(Bram Moolenaarによる報告)。

bashを使用している人は、メタモードはエスケープ文字を前に付けることを指すと思いがちですが、逆にしています。 ncurses FAQのAltキーはbashでは機能しませんを参照してください。

eightBitInputoffをオフにすると、この特定の問題は解決されません。xtermは送信します。 escapetab を押すと metatabbashが反対すべき...

2
Thomas Dickey

私の仕事用マシンにはWindowsがあり、git-bash CLI(mintty cygwin)を使用して、通常Linuxで実行するコマンドを実行します。

powerShellウィンドウからコピーして貼り付けた後にbash: $'\302\226curl': command not foundを取得したことがありました。

$ curl -v -F foobar
bash: $'\302\226curl': command not found

肉眼では完全に見えず、$ curl -v -F foobarのように見えた場所

つまり、コマンドの前からすべての空白を削除しました:

$curl -v -F foobar

$の間に空白がないことに注意してください

これが誰かを助けることを願っています、乾杯

2
Piotr Z

これは、 " CHARACTER TABULATION WITH JUSTIFICATION "のUTF-8エンコーディングです。

通常のタブの代わりにこの変わった文字を使用する特定のキーボードまたはエディターを使用していると思います。これは通常、シェルのコマンドラインでは無視されます。または、シェルとターミナルエミュレーターの間にロケールの不一致があります。

1
jlliagre

これは問題を解決します:

setxkbmap -option "nbsp:none"
1
Bigouden

シェルは、jlliagreが彼の答えで言っていたのと同じように、目に見えない文字を解釈し、それらについて不平を言っています 正当化を伴う文字表

非表示の文字を入力していない場合、シェルは他の場所でデータを取得し、それを入力として誤解しています。言い換えれば、それはバグです。使用しているターミナルエミュレータのメンテナに報告する必要があります。

(この質問は4歳になりましたが、他の人の助けになるかもしれません。)

0
Kallaste