「cd」コマンドがホームディレクトリに移動しないようにするにはどうすればよいですか?


10

問題は、cd誤って入力することがあり、ホームディレクトリに移動することです。

たとえば、隠しディレクトリと表示ディレクトリがあるディレクトリにいるのですが、すぐにcd+ tabを押すと、ホームディレクトリに移動します


30
cd誤ってどこかにいる場合は、を使用cd -して以前の場所に戻ります。bashは$OLDPWDこの目的のために変数を保持します。gnu.org/software/bash/manual/bash.html#index-cd
glenn jackmanを

4
本当にcd何もしたくcdない場合は、引数を指定しないと何もしないという名前の関数を記述できます。それ以外の場合は、次のように呼び出しますbuiltin cd "$@"
glenn jackman

2
本当に悪い考え:HOME =。
ジョシュア

26
コマンドを実行する前に、速度を落とし、コマンドを確認する方法を学ぶことを心からお勧めします。つまり、cd何をするにも慣れる。再確認していないコマンドを実行する習慣をつけていると、後でさらに大きな問題が発生します。たとえば、2つのファイルを3番目のディレクトリに移動したい場合:mv a b dir/TAB補完がdir期待どおりに生成されず、mv a b上書きしてしまうことになりますb。Enterキーを押す前に、注意を払い、コマンドを確認してください。
エモント2018年

1
@Joe私はのためのラッパースクリプトを書いたrmようなトップレベルのディレクトリの削除を防止するために//etc/usr/home/varパスワード・オーバーライドなし、など。時々私たちは自分自身からの保護が必要です:)
WinEunuuchs2Unix

回答:


14

以下のgedit ~/.bashrc行を使用して下部に挿入します。

cd() {
    [[ $# -eq 0 ]] && return
    builtin cd "$@"
}

新しいターミナルを開いて、cdパラメーターなしで入力すると、同じディレクトリにとどまります。


TL; DR

本当に手の込んだものにしたい場合は、パラメーターが渡されないときにヘルプ画面を表示できます。

$ cd

cd: missing operand

Usage:

    cd ~            Change to home directory. Equivelent to 'cd /home/$USER'

    cd -            Change to previous directory before last 'cd' command

    cd ..           Move up one directory level

    cd ../..        Move up two directory levels

    cd ../sibling   Move up one directory level and change to sibling directory

    cd /path/to/    Change to specific directory '/path/to/' eg '/var/log'

これを実現するための拡張コードは次のとおりです。

cd() {
    if [[ $# -eq 0 ]] ; then
        cat << 'EOF'

cd: missing operand

Usage:

    cd ~            Change to home directory. Equivelent to 'cd /home/$USER'

    cd -            Change to previous directory before last 'cd' command

    cd ..           Move up one directory level

    cd ../..        Move up two directory levels

    cd ../sibling   Move up one directory level and change to sibling directory

    cd /path/to/    Change to specific directory '/path/to/' eg '/var/log'

EOF
        return
    fi

    builtin cd "$@"
}

6
しかし、あなたはあなたの環境を他の環境のように機能させませんでした。関数を呼び出してncd(「新しいcd」の場合)、そのままにしておきcdませんか?
ワルティネーター2018年

@waltinator cd のホームユーザー以外のユーザーに対して(空白)の動作が異なるという警告を表示して、回答を改善できます~/.bashrc。何に気をつけるべきか、例を挙げてください。たとえば、開発者はcd インストールスクリプトで(空白)を使用します。(仮説ですが、私はケースを考えることができません)。私はあなたの例を答えにまとめ、OPがのncd代わりに常に使用することを提案できますcd
WinEunuuchs2Unix 2018年

物事をカスタマイズするのが大好きです。それがLinuxの目的です。しかし、私には、一般的なコマンドの機能(しゃれは意図されていません)を変更しないという厳格な個人ルールがあります。これは、別のシステムで作業しているとき、または誰かがあなたのシステムで作業しているとき、またはあなたに助言しているときに問題を引き起こします。私は@waltinatorと他の「良い」ジョーに同意します
ジョー

6

これを引き起こしているのがタブ補完である場合、1つのオプションは、エントリ間で補完サイクルをすぐに行うことです。これは、デフォルトの代わりにreadlineのmenu-compleオプションを使用して行うことができますcomplete

bind 'tab: menu-completion'

次に、私のホームディレクトリで、たとえば:

$ cd <tab> # becomes
$ cd .Trash

もちろん、その場合でも、実行中の内容を読み取る必要があります。


4

これが私が現在のディレクトリとユーザーを私のウィンドウのタイトルに入れる方法です-あなたはそれをあなたのニーズに適応させることができますがcd -、同等のものcd $OLDPWDはより良い解決策です。

私から~/.bashrc

# from the "xttitle(1)" man page - put info in window title
update_title()
{
    [[ $TERM = xterm ]] || [[ $TERM = xterm-color ]]  && xttitle "[$$] ${USER}@${HOSTNAME}:$PWD"
}

cd()
{
    [[ -z "$*" ]] && builtin cd $HOME
    [[ -n "$*" ]] && builtin cd "$*"
    update_title
}

4

ここでの問題はでなくcd、技術によっても修正されていません。

問題はあなたです、そしてそれは忍耐によって修正されます!

不要なコマンドを頻繁に入力したり送信したりすることがよくある場合は、速度を落とす練習をしてください。一息、入力内容を読み、Enterキーを押す前に再確認してください。よく考えてください。急がないでください。

このアプローチは、現在の問題を解決するだけでなく、現在の道を進み続けると遭遇する他のはるかに悪い問題を解決することがわかります。


2
また、数か月/数年の使用後、動作を変更したことを忘れてしまい、他の環境で動作するのに問題が発生します。
pLumo 2018年

@RoVoそれも良い点です!
オービットのライトネスレース

@RoVoそれは数日で起こります。すぐに、デュアルブートする場合は、VMに切り替えます...
Joe

@Joe最近、私は昼間のOSXと夕方のWindowsを切り替えていて、キーボードレイアウトの変更は本当に混乱しています!
オービットのライトネスレース

@LightnessRacesinOrbitきっと!レイアウトがほぼ同じでサイズの異なる2つのノートブックキーボードを使用していますが、それで十分です。それが、私がDvorakキーボードを使ったことがない理由でもあります。これが質問にどのように関係しているかはわかりません。
Joe
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.