私は何をしたいですか?

私は何をしたいですか?

私は別のMacBookで仕事でbashを、家ではzshを使ってきました。私はbashやzshスクリプトについてよくわからないので、ZSHが私が働いている場所と同等のレベルになり、生産性が失われないまで切り替えることを恐れています。

結局、.dot-filesgithubにリポジトリを作成し、すべてをテストしたかったのです。効率的。しかし、最終的な調整をすることを決めたとき、すべてが崩壊し、生涯の間にその理由を理解することはできません。

想像する:

私は〜/.dot-filesを私のgitリポジトリのルートとして使用します。その後、2つのサブフォルダzshがあり、bash各ファイルには隠しファイルとそれをインポートする設定があります。

$ cd ~/.dot-files/bash/
$ ls -la
drwxr-xr-x  8 me  staff    256 May  8 13:28 .
drwxr-xr-x  7 me  staff    224 May  8 13:00 ..
-rw-r--r--  1 me  staff   1791 May  8 13:08 .alias
-rw-r--r--  1 me  staff  79837 Apr 12  2022 .git-completion.bash
-rw-r--r--  1 me  staff   1602 May  8 13:49 .git-prompt
-rw-r--r--  1 me  staff   1816 May  8 13:06 .ps1
-rw-r--r--  1 me  staff    877 May  8 13:09 .utils
-rw-r--r--  1 me  staff    142 May  8 15:20 default-config

そして

$ cd ~/.dot-files/zsh/
$ ls -la
drwxr-xr-x  7 me  staff    224 May  8 13:33 .
drwxr-xr-x  7 me  staff    224 May  8 13:00 ..
-rw-r--r--  1 me  staff   1423 May  8 12:32 .alias
-rw-r--r--  1 me  staff  18582 May  8 12:32 .git-prompt.sh
-rw-r--r--  1 me  staff   2059 May  8 12:32 .prompt
-rw-r--r--  1 me  staff    926 May  8 14:01 .zsh-git-info
-rw-r--r--  1 me  staff    143 May  8 15:02 default-config

$猫〜/.bashrc

source ~/.dot-files/bash/default-config

$猫〜/.dot-files/bash/default-config

source "$(dirname -- "$0")/.git-prompt"
source "$(dirname -- "$0")/.ps1"
source "$(dirname -- "$0")/.alias"
source "$(dirname -- "$0")/.utils"

これはうまくいきません

-bash: ./.git-prompt: No such file or directory
-bash: ./.ps1: No such file or directory
-bash: ./.alias: No such file or directory
-bash: ./.utils: No such file or directory

$猫〜/.zshrc

source ~/.dot-files/zsh/default-config

$猫~/.dot-files/zsh/default-config

source "$(dirname "$0")/.alias"
source "$(dirname "$0")/.prompt"
source "$(dirname "$0")/.zsh-git-info"
source "$(dirname "$0")/.git-prompt.sh"

これは実際に完全に機能します。

私は何をしたいですか?

シェルを変更して端末を再起動したいですchsh -s /bin/bash。私はそれが動作することを願っています。

~/.bashrc誰でもどこでも複製できるリポジトリを指したいと思います。

リポジトリがデフォルト構成の相対パスを参照したいと思います。フルパスをハードコードしたくありません。

zshの場合はsource "$(dirname "$0")大丈夫です。私が理解する限り、ステップは次のとおりです。

  • ~/.zshrcファイルソースを直接呼び出します。~/.dot-files/zsh/default-config
  • そのファイルはソースコマンドを呼び出しますが、「my path」$(dirname "$0")と「my」と同じフォルダにファイル名が順番に挿入されます。
    • source "$(dirname "$0")/.alias"source ~/.dot-files/zsh/.alias

Bashが動作しないのに理由がわからない。

ベストアンサー1

Bourne/POSIX シェルでは、特殊パラメータ$0シェルで実行されるスクリプトの名前(またはシェル自体の名前)に設定します。以下を使用して他のスクリプトファイルを読み込んでも変更されません。.(「指す」)注文する。吹くsourceシノニムを使用する場合を含む、この領域の標準動作に従ってください。.(「指す」)

zshではデフォルトで特殊パラメータ$0現在のスクリプトのパスまたは現在の関数の名前に設定します。つまり、関数を使用または.ビルドするとき、関数が呼び出されたとき、関数またはスクリプトから返されたときにsource変更されます。オプションの設定を解除すると、zshを標準動作に変更できますfunction_argzero(zsh が sh または ksh エミュレーションモードでない限り、デフォルト値) または設定posix_argzero

Bashでは、現在のスクリプトのパス(.またはの影響を受けるsource)を名前の下で使用できます。$BASH_ARGV0


ちなみに、ディレクトリコンポーネントを持つディレクトリではなくファイルへのパスがあることがわかっているので、ファイルを含むディレクトリを"${0%/*}"参照する簡単で少し高速な方法を使用できます。1

1"$(dirname -- "$0")"ディレクトリ名が改行文字で終わり、"$(dirname "$0")"パスがダッシュで始まる場合よりも効率的ですが、ここでは適用されません。パスがスラッシュで終わる場合、またはスラッシュがまったく含まれていない場合は機能しないという点で、より脆弱ですが、これにも当てはまりません。

おすすめ記事