Saya pernah membuat skrip yang berguna untuk tujuan yang sama, dengan fungsi fcd untuk find-n-cd.
Anda mengetik fcd foo
dan 3 hal dapat terjadi:
- Tidak ada direktori foo yang ditemukan, kemudian dikembalikan dengan
"no such directory " $1
- Satu file ditemukan: Ini menguji apakah itu adalah direktori (atau hanya file) dan jika demikian, ia ada di sana.
- Beberapa file ditemukan - maka pilihan disajikan, di mana Anda cukup mengetikkan nomor pilihan (atau nomor khusus untuk pengembalian).
Mirip dengan itu tidak perlu Anda mengetikkan seluruh path, tetapi Anda telah memanggil fungsi secara eksplisit.
#!/bin/bash
#
# find cd. For input foo, find all directories .../.../foo
# GPLv3 Stefan Wagner (2010, 2012)
#
# doesn't handle blanks in directory names gracefully.
#
fcd ()
{
list=$(locate $1 | egrep "/$1$")
count=$(echo $list | wc -w )
case $count in
0)
echo "unknown directory: "$1 && return
# could search for partial matches Doc => Documentation
;;
1)
if [[ -d "$list" ]]; then
echo "$list";
cd "$list";
else
echo "not a directory: $1"
fi
;;
*)
select directory in $list "/exit/"
do
if [[ "$directory" = "/exit/" ]]; then break; fi
if [[ -d "$directory" ]]; then
echo "$directory";
cd "$directory";
break
else
echo "not a directory: "$1
fi
done
;;
esac
}
Anda harus source
menggunakan fungsi ( source fcd.sh
| . fcd.sh
) dan tidak dapat menyebutnya sebagai skrip, karena cd
akankah hanya terjadi dalam konteks skrip, dan setelah selesai Anda akan segera kembali ke dir mulai Anda.
Karena ini bekerja dengan locate
, itu cukup cepat dalam menemukan direktori (tetapi tidak selalu up to date).
Itu tidak menangani kosong dalam nama direktori dengan anggun. Jika Anda memiliki solusi yang elegan untuk masalah ini, saya akan senang.
shopt -s autocd
di baris perintah itu berhasil. Sekarang saya bisa mulai mengetik nama direktori dan menggunakan autocomplete dan kemudian tekan kembali dan shellcd
ke dalam direktori. Keren abis !