次の関数を作成しました~/.bashrc
。
function cl {cd $1; echo $1; ls -al $1}
(実際に読む内容を確認するためにechoコマンドをそこに入れました)
私のホームディレクトリに「samplesフォルダ」というフォルダを作成し、cl "example folder"
andを試しました。彼らはすべて同じものを印刷します:cl example\ folder
cl ~/"example folder"
-bash: cd: too many arguments
example folder
以下は、現在のディレクトリのみを一覧表示するlsコマンドです。
それでは、この問題を解決する方法はありますか?スペースを含むディレクトリを渡すには?
ベストアンサー1
function cl {cd $1; echo $1; ls -al $1}
Bash構文よりzsh構文に近いですが、それでもなお多くの問題があります。
存在するbash
- その後にはスペースが必要
{
で、その前には}
コマンド区切り記号(;
、、&
改行文字ですがそれも大丈夫です)が必要です。)
zshでは動作しません。 - パラメータ拡張は引用符で囲む必要があります。それ以外の場合は分割+globを経ます。 zshでは動作しません。
- 変数データをオプションではなく汎用パラメータとして渡す場合は、オプションを閉じるタグ()を前に付けると、データが
--
オプションとして処理されるのを防ぐことができます-
。 cd
次のコマンドを実行した後、終了ステータスを確認しません。echo
任意のデータの出力には使用できません。代わりに使用してくださいprintf
。cd
編集後に$1
相対パスls -la $1
(またはより正確にはls -la -- "$1"
)は機能しなくなります。$1
おそらくあなたはls -la
(またはls -lA
)だけが欲しいでしょう。- スクリプトは一般的に
cd
一緒に使用し、他の言語のように動作するように設定されていないか空であることを-P
確認してから()を使用しようとします。ただし、対話型シェルで関数を使用している場合は適用されません。$CDPATH
CDPATH= cd -P -- "$1"
chdir()
function f { ...; }
関数定義のためのksh構文。標準構文よりもこれを好むbash
理由はありません。f() { ...; }
だから:
cl() {
cd -- "$1" || return
printf '%s\n' "$1"
ls -Al
}
引数が渡されない場合、cd
ディレクトリは次のように変更されます。家ディレクトリ(cd
またはに似ています)。cd ~
cd "$HOME"
ただし、ここでcl
引数なしで呼び出すと、引数がまったくない(そして窒息する可能性がある)"$1"
代わりに空の引数に拡張されます。引数なしでifをcd
呼び出すには、(ホームディレクトリに移動してそこにあるファイルを一覧表示する)に置き換えるか、または受け取ったものと同じ引数のリストで呼び出すことができます。たとえば、orを使用できます。cd
cl
cl
"$1"
${1+"$1"}
cd
cl
"$@"
cl -P ../bin
cl -- -dir-whose-name-starts-with-dash
その後、最初の引数または最初の引数のみをcd
使用する代わりに、後で現在の作業ディレクトリを印刷できます。printf '%s\n' "$PWD"
pwd
cl() {
cd "$@" || return
pwd
ls -Al
}
追加資料: