bash エイリアスをコマンドの埋め込みで動作させる方法 (例: $() (ドル記号と角括弧))

bash エイリアスをコマンドの埋め込みで動作させる方法 (例: $() (ドル記号と角括弧))

私はかつて次のようなニックネームを持っていました。

alias mount-open="sudo mount $(sudo blkid | gawk '/2tb-open/ { print substr($1, 0, 9) }') 2tb-open"

100%同じであるとは確信できませんが、100%bash関数ではなくbashエイリアスであり、変数などを使用せずに他のコマンドが含まれています。

これでこれを行うことはできません。例のように二重引用符を入れると、端末の起動時にいくつかのsudoコマンドを実行しようとします。単一引用符を使用して中間引用符をエスケープする場合:

alias mount-open='sudo mount $(sudo blkid | gawk \'/2tb-open/ { print substr($1, 0, 9) }\') 2tb-open'

それは言う:

bash: .bashrc: line 25: syntax error near unexpected token `('

私はこれがFedoraに比べてかなり簡潔な基本的なUbuntu bashrcの「追加コード」に関連していると思います。私の言葉は、Ubuntuで動作するということです。数年前にFedoraをインストールし、Ubuntuシステムからbashrcファイルをコピーしましたが、エイリアスなどが正しく機能しました。 1週間前は、Fedora 32(Ubuntu bashrcを使用)で動作しました。しかし、今私のデータが失われたので、それを「再作成」しようとしています。現在、私はデフォルトのFedora bashrcファイルを使用していますが、最初は15行しかありません。

誰でもこの問題を解決する方法を提案できますか?

ありがとうございます。

ベストアンサー1

関数やスクリプトを使用する方が簡単です。

mount-open() {
  sudo mount "$(
      sudo blkid |
        gawk '/2tb-open/ { print substr($1, 0, 9) }'
    )" 2tb-open
}

ただし、ラベル付きデバイスをインストールする場合は2tb-open

mount-open() { sudo mount LABEL=2tb-open 2tb-open; }

それだけで十分です。

おすすめ記事