
カスタム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)
プロンプトにbash
。bash
関数を実行し、関数の出力をシェルコマンドとして処理するように指示します。この一般的な技術をコマンド置換といい、サンプルコードで見つかったエラーを生成します。
代わりに、単に関数を呼び出してください。
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
。