bash起動スクリプトで次の関数を設定しています。
# Date Time Stamp
dts() { date +%Y-%m-%d-%H-%M-%S; }
# Date mkdir
dmkdir() { mkdir $(dts); }
私は主にコマンドラインでそれらを使用します。スクリプト内で実行する場合は、スタートアップスクリプトを入手するか、スクリプト内でシェル関数を定義する必要があります。名前(例)を前に付けたい場合はmydir
、次のような引数を簡単に付けることができます。
# Date mkdir
dmkdir() { mkdir "$@$(dts)"; }
これは次のように呼ばれます:
$ dmkdir mydir
$ ls -d mydir*
mydir2012-05-18-11-38-40
これは、引数リストにスペースが含まれている場合、それらがディレクトリ名に表示されることを意味します。これは良いことかもしれませんし、そうでないかもしれません。
シェル関数内でシェル変数を割り当てることができます。これは関数外でアクセスできます。
dmkdir() { newdir="$@$(dts)"; mkdir $newdir; }
このように使用されます:
$ dmkdir mydir
$ cd $newdir
$ pwd
/tmp/mydir2012-05-18-12-54-32
これは非常に便利ですが、注意しなければならないことがいくつかあります。1)名前空間を汚染している-$newdir
別のプロセスによって作成されたと呼ばれるシェル変数を上書きする可能性がある2)どれを忘れるのは非常に簡単です変数dmkdirは、特に変数を書き出すシェル関数がたくさんある場合に書き込みます。適切な命名規則は、両方の問題に大いに役立ちます。
もう1つのオプションは、シェル関数にディレクトリ名をエコーさせることです。
dmkdir() { local newdir="$@$(dts)"; mkdir $newdir && echo $newdir; }
これは次のように呼び出すことができます。
newdir="$(dmkdir mydir)"
local
$newdir
これは、Good Thing(TM)であるdmkdirの外部では使用できないことを意味します。
の使用は&&
、ディレクトリの作成が成功した場合にのみディレクトリの名前をエコーすることを意味します。
この$()
構文では、STDOUTにエコーされたものをすべてロードして変数にロードできます。一重引用符を使用すると、ディレクトリ名にスペースがある場合でも、単一の変数にロードされます。
これにより、前のソリューションに固有の名前空間汚染の問題が回避されます。