ディレクトリにタイムスタンプを取るために.bashrcにエイリアスを作成しようとしています。明らかに、これは私にとってあまり効果がありませんでした。たとえば、
.bashrcの下
alias testit="export testor=$(date +%d);mkdir ~/Desktop/$testor"
結果:
~> testit
mkdir: cannot create directory ‘/home/SJL/Desktop/’: File exists
今コマンドを実行すると
~> export testor=$(date +%d)
~> mkdir ~/Desktop/$testor
ディレクトリが作成されました。問題ありません。
今実行すると:
~> export testor=$(date +%d);mkdir ~/Desktop/$testor
今回も問題ありません。
.bashrcで宣言されたエイリアスを使用しても機能しません。
似たようなことを何度もやってみましたが、日付形式に問題/エラーがあるようなので本当に気になります。
ご意見ありがとうございました。
答え1
エイリアスを作成すると$testor
値がないため、エイリアスは次のようになります。
export testor=13;mkdir ~/Desktop/
を使用して、エイリアスが拡張されていることを確認できますalias aliasname
。
この問題を解決するには、二重引用符の代わりに一重引用符を使用してください。これは、エイリアスが実際に呼び出されるまで、変数の拡張とコマンドの置換を延期します。
$testor
他のものが必要ない場合は、使用してください
alias tester='mkdir "$HOME/Desktop/$(date '+%d')"'
あなたのコメントを読んだら、次のように動作します。
alias makedir='mkdir "$HOME/Desktop/$(date '+%d')"'
alias copyfile='cp somefile "$HOME/Desktop/$(date '+%d')"
または、より複雑なシェル機能を使用すると、すべてのファイルをフォルダにコピーできます(エイリアスを使用すると決して実行できない操作)。
copyfile () {
destfolder="$HOME/Desktop/$(date '+%d')"
if [ -d "$destfolder" ]; then
mkdir "$destfolder"
fi
cp "$1" "$destfolder"
}
これは、コマンドラインで提供されたファイルを日付付きフォルダにコピーするcopyfile
ために使用される関数を定義します。cp
フォルダがない場合は作成されます。