디렉터리에 타임스탬프를 찍기 위해 .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
폴더가 없으면 생성됩니다.