Quando você estiver no diretório ~/test/basic_unix
e invocar seu script, o comando mkdir "$createdep"
criará essa pasta em ~/test/basic_unix
porque esse é o diretório atual, é de onde você executou o script. No entanto, quando você executa esse script a partir do cron, o diretório com o qual você começa é o seu diretório inicial, ~
, portanto, o comando mkdir
cria a pasta lá.
Sua confusão pode ser porque você acha que, como seu script está em ~/test/basic_unix/createfiles.sh
, as pastas sempre serão criadas lá, mas isso é incorreto. Não é sobre onde o script está localizado, é sobre onde você executa o script. Para dar um exemplo, crie um diretório ~/testing2
, depois cd ~/testing2
e, em seguida, chame seu script usando sh ~/test/basic_unix_createfiles.sh
. Você verá que suas pastas estão sendo criadas com ~/testing2
, não ~/test/basic_unix
. Por quê? Porque é de onde você executou o script e desde que seu comando mkdir
está usando um caminho relativo, ou seja, como seu comando mkdir
é assim: mkdir foldername
, ele é criado no diretório de trabalho.
Para corrigir seu problema, a maneira mais fácil é cd
para onde você deseja criar as pastas no início, para que seu script seja assim:
#THIS CODE WILL CREATE A DIRECTORY WITH TIME OF CREATION AS PART OF DIRECTORY NAME
cd /home/adhikarisubir/test/basic_unix #this is the new line added, the rest is the same
echo "The time is $(date +%H_%M_%S)"
now=$(date +%H_%M_%S)
echo $now
echo $(pwd)
createdep=nowt_$now
echo "$createdep"
mkdir "$createdep"
cd nowt_$now
echo "Current directory is $(pwd)"
echo "This is a text file which will contain the createtime" > Newtxt.txt
sed -i "s/createtime/$(date '+%H:%M:%S')/g" Newtxt.txt
Outra maneira de corrigir seu problema é alterar o comando mkdir
para usar um caminho absoluto. Então, seu script ficaria assim:
#THIS CODE WILL CREATE A DIRECTORY WITH TIME OF CREATION AS PART OF DIRECTORY NAME
echo "The time is $(date +%H_%M_%S)"
now=$(date +%H_%M_%S)
echo $now
echo $(pwd)
#createdep=nowt_$now
createdep=/home/adhikarisubir/test/basic_unix/nowt_$now #createdep is now an absolute path
echo "$createdep"
mkdir "$createdep"
#cd nowt_$now
cd $createdep #this cd command now cds to $createdep
echo "Current directory is $(pwd)"
echo "This is a text file which will contain the createtime" > Newtxt.txt
sed -i "s/createtime/$(date '+%H:%M:%S')/g" Newtxt.txt
É melhor sempre usar caminhos absolutos, então use sempre /home/adhikarisubir/test/basic_unix
em vez de dizer test/basic_unix
.
Nota: suponho que o seu diretório pessoal seja /home/adhikarisubir
.