
私が作業しているbashを確認しました。
$ which bash
/usr/local/bin/bash
$ ls -l $(which bash)
lrwxr-xr-x 1 me 30 Oct 27 10:40 /usr/local/bin/bash -> ../Cellar/bash/4.4.23/bin/bash
次に、bashの親ディレクトリを確認します。usr/local/bin/
$ ls -l ../$(which bash)
ls: cannot access '..//usr/local/bin/bash': No such file or directory
$ ls -l ..$(which bash)
ls: cannot access '../usr/local/bin/bash': No such file or directory
残念ながら、私は別のミスを犯しました。
コマンド置換$を使用してbashから親フォルダに移動するには?
答え1
あなたがやっていることは終了せずに実行しようとしていることですls
。..//usr/local/bin/bash
$ echo ../$(which bash)
..//usr/local/bin/bash
また、を使用するとls -l ..$(which bash)
相対アドレスが指定されるため、現在の作業ディレクトリの場所によって結果が異なります。
したがって、これはエラーを引き起こすべきではありません(親ディレクトリではなくファイルを探します)。
$ cd /usr
$ ls -ld ../$(which bash)
dirname
次のコマンドを使用する必要があります。
$ dirname $(which bash)
/bin
または:
$ ls -ld $(dirname $(which bash))
drwxr-xr-x 2 root root 4096 Oct 17 16:46 /bin
ファイルがリンクされている場合(例:あなたの場合はbash、私の場合はsh):
$ ls -ld $(dirname $(readlink -f $(which sh)))
drwxr-xr-x 2 root root 4096 Oct 17 16:46 /bin
答え2
技術的には、を使用しても実際に実行されているバージョンがwhich bash
常に返されるわけではありませんbash
。別のバージョンを実行しているが異なるバージョンを含むパスを使用することもできます。 Linuxでは、(プロセスIDまたは実行中のシェル)をproc
使用してファイルシステムで実行されているシェルの実行可能ファイルを取得できます。/proc/$$/exe
$$
$(dirname $(readlink /proc/$$/exe))