readlinkを使用しようとすると「ディレクトリです」エラー

readlinkを使用しようとすると「ディレクトリです」エラー

カスタムPS1を作成しようとしてbashを使用していますが、現在存在するディレクトリの絶対パスを印刷しようとするとエラーが発生します。私は$FIRMWAREシンボリックリンクであるディレクトリを持っています。 PS1で解決されたシンボリックリンクを表示したいです。追加情報とともに、次のコードを削除しました。

export FIRMWARE="/path/to/firmware"

firmware_link() {
    local A
    A="$(readlink ${FIRMWARE})"
    echo $A 
}

この関数を呼び出すと

> $(firmware_link)
bash: /path/to/firmware: Is a directory

追いかけようとするこの投稿しかし、見積もり提案は私の問題を解決できませんでした。私はこれがフォーマットエラーであるか、bashがどのように機能するかについての根本的な誤解だと思います。

答え1

言うことで:

$(firmware_link)

プロンプトにbashbash関数を実行し、関数の出力をシェルコマンドとして処理するように指示します。この一般的な技術をコマンド置換といい、サンプルコードで見つかったエラーを生成します。

代わりに、単に関数を呼び出してください。

firmware_link

予想される出力は次のとおりです。

/path/to/firmware

問題がどのように発生するかを確認するには、bashプロンプトで手動でディレクトリ名を入力します。

/path/to/firmware
-bash: /path/to/firmware: Is a directory

コードを少し単純化すると、コード内のエラーを見つけやすくなります。

export FIRMWARE="/path/to/firmware"

firmware_link() {
    readlink "${FIRMWARE}"
}

これは、関数の出力がfirmware_link有効なコマンドではなくディレクトリ名になることをより明確にしますbash

関連情報