nemo ジョブ/bash スクリプトのカスタマイズ

nemo ジョブ/bash スクリプトのカスタマイズ

nemoファイルマネージャにカスタムアクションを追加しようとしています。このタスクの目的は、単にファイル名のすべてのスペースを「_」に置き換えることです。私の作業ファイルは次のとおりです。

[Nemo Action]
Name=Normalize
Comment=replace all occurences of " " by "_"
Exec=<normalize.sh %F>
Selection=Any
Extensions=Any

Bash スクリプト Normalize.sh は、次のように actions ディレクトリにあります。

#!/usr/bin/bash

if [[ "$#" != 1 ]]
    then exit 1
fi

name=`echo "$1" | sed "s/\ /\_/g"`
mv "$1" "$name"

exit 0

なぜこれがうまくいかないのか知っている人はいますか?

答え1

質問:

問題は非常にマイナーです。つまり%F、ファイル名でファイル名にスペースが含まれているので、次のようにスクリプトを呼び出します。

normalize.sh my fancy file

だからそれは$1なったmy$2なったfancy$3なったfile。これで$#3になりました。


修正1(推奨):

この問題を解決するには。パラメータの数を確認する必要はありません。これで$@代わりに使用できます$1。スクリプトは次のとおりです。

#!/usr/bin/bash

name=`echo "$@" | sed "s/\ /\_/g"`
mv "$@" "$name"

exit 0

修正2:

別の解決策は、周囲に引用符を付けることです%F。正しいコードは次のとおりです。

[Nemo Action]
Name=Normalize
Comment=replace all occurences of " " by "_"
Exec=<normalize.sh "%F">
Selection=Any
Extensions=Any

拡張スクリプト:

#!/usr/bin/env bash

mv "$@" "$(tr ' ' '_' <<< "$@")"
exit 0
  • 通常はオンにbashなっています/bin/bash。あなたが開いているようだから/usr/bin/bash(最初に見たことがある)、bashがどこにいても実行できる一般的なwhich bash回避策を設定しました。ただし、端末でbashに入力されたパスを表示できます。
  • パラメータ計算条件を削除しました。
  • sed既存のものを使用する理由は何ですかtr
  • echoファイルsedやをtr使用する代わりに<<<
  • すべてを一行に入れたらどうでしょうか?

関連情報