まず、いくつかの背景知識に基づいて.tgzファイルを自動的に解決するためにデフォルト値に簡単にマッピングできる実行可能なシェルスクリプトを作成しようとしています。
これまでは簡単です
tar -xzvf $1
ドラッグ/ドロップでは機能しますが、ダブルクリックすると機能しません。ファイルが同じ場所にある場合は使用できるため、スクリプトの現在の作業ディレクトリが原因であるとします。
しかし、同じように$ 1は完全なファイルパスをtarコマンドに渡すべきではないので大丈夫でしょうか?
とにかく、私は答えがpwdコマンドの後にdirnameコマンドが来ると思いました。
cd 'dirname $1'
しかし、これはGoogleの提案は機能しません。
cd -P -- "$(dirname -- "$1")" && pwd -P
ただし、まだこのスクリプトを機能させることはできません。これは正しいエラーではない可能性があります。
ベストアンサー1
いいえ、$1
これはフルファイルパスには拡張されません。実際には、ファイルが存在しない場合でも正確な最初の引数です。
簡単な例を見ると、echo $1
実際にこれが明らかになります。
-C
厄介なディレクトリ変更の代わりに対応するフラグを使用してください。
man tar
-C, --directory=ディレクトリ
操作を実行する前にDIRに変更してください。このオプションは順序を区別します。つまり、すべての後続のオプションに影響します。
つまり、スクリプトは次のようになります。
#!/bin/bash
tar -C "$(dirname "$(readlink -f "$1")")" -xzvf "$1"