'find ...'のような有効なコマンドを入力するだけで、次のような結果が返されることがありますが、これはまったく予期せず混乱を招きます(...
は入力したコマンド名です)。
sh: $'\302\211...': command not found
いくつかの腐敗が起こっていると思います。プロンプトで色を使用していません。POSIXモードのBashシェルをsh
として使用しています(chsh
から/bin/sh
など-$Shell
はsh
です)。
何が起こっているのですか、そしてなぜこれが起こり続けるのですか?デバッグできるものはありますか?これは、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/environment
にENV=/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
ステートメントが何をするのかはわかりませんが、少し疑わしいように見えますが、繰り返しになりますが、私は誰を知っていますか。
Linuxスタイルのクリップボードからコマンドを最初に貼り付けようとしたときに発生します(Ctrl+Shift+V)それが機能しない場合は、マウスで貼り付けます。どうやら、キーボードの組み合わせは、コマンドの前に非表示の文字を挿入します。解決策は簡単です。キーボードを使用して貼り付けないでください。使用している場合は、を押してください。 Backspace マウスで貼り付ける前に。
0x89
は手がかりを提供します:デフォルトでは eightBitInput
リソース設定、xterm
論理的に-入力8ビットコードをORして0-127から128にマップします- 255:
^I
は0x9であり、押すと同時に「メタ」キーを押さないことで問題を解決できます 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では機能しませんを参照してください。
eightBitInput
offをオフにすると、この特定の問題は解決されません。xterm
は送信します。 escapetab を押すと metatab、bash
が反対すべき...
私の仕事用マシンには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
$
の間に空白がないことに注意してください
これが誰かを助けることを願っています、乾杯
これは、 " CHARACTER TABULATION WITH JUSTIFICATION "のUTF-8エンコーディングです。
通常のタブの代わりにこの変わった文字を使用する特定のキーボードまたはエディターを使用していると思います。これは通常、シェルのコマンドラインでは無視されます。または、シェルとターミナルエミュレーターの間にロケールの不一致があります。
これは問題を解決します:
setxkbmap -option "nbsp:none"
シェルは、jlliagreが彼の答えで言っていたのと同じように、目に見えない文字を解釈し、それらについて不平を言っています 正当化を伴う文字表 。
非表示の文字を入力していない場合、シェルは他の場所でデータを取得し、それを入力として誤解しています。言い換えれば、それはバグです。使用しているターミナルエミュレータのメンテナに報告する必要があります。
(この質問は4歳になりましたが、他の人の助けになるかもしれません。)