需要在bash脚本中创建文件

需要在bash脚本中创建文件,bash,substitution,Bash,Substitution,我必须以非root用户的身份在脚本中运行命令,否则该命令将无法运行。但是,一旦完成,我需要将后续文件发送给root用户。然而,我不确定什么是“正确的”或最好的方法。 样本: 基本上,上面有各种变量替换。我还在文件中添加时间戳。由于文件有时间戳(如果我运行以下程序,则时间戳可能会有所不同),所以最好的方式是如何浏览刚刚创建的文件: chown root:root "/home/zzz/backups/${url}_${st}_$(date '+%Y-%m-%d-%H-%M-%S').sq

我必须以非root用户的身份在脚本中运行命令,否则该命令将无法运行。但是,一旦完成,我需要将后续文件发送给root用户。然而,我不确定什么是“正确的”或最好的方法。 样本:

基本上,上面有各种变量替换。我还在文件中添加时间戳。由于文件有时间戳(如果我运行以下程序,则时间戳可能会有所不同),所以最好的方式是如何浏览刚刚创建的文件:

chown root:root "/home/zzz/backups/${url}_${st}_$(date '+%Y-%m-%d-%H-%M-%S').sql"

如何运行命令并将该命令的一部分放入变量(输出文件名)中?

您应该只运行一次
date
命令,并将结果存储在变量中。您可以只存储日期:

curr_date="$(date '+%Y-%m-%d-%H-%M-%S')"
sudo -u $usr db export --path="${htmldir}"/ "/home/zzz/backups/${url}_${st}_${curr_date}.sql"
chown root:root "/home/zzz/backups/${url}_${st}_${curr_date}.sql"
…或将整个文件路径保存在变量中:

sql_file="/home/zzz/backups/${url}_${st}_$(date '+%Y-%m-%d-%H-%M-%S').sql"
sudo -u $usr db export --path="${htmldir}"/ "$sql_file"
chown root:root "$sql_file"
就我个人而言,我更喜欢第二个,因为它更清楚地表明,这两个地方都是同一个文件(而且在两个命令中很难使用不同的路径)。如果您还需要将日期用于其他内容,我建议您同时存储:

curr_date="$(date '+%Y-%m-%d-%H-%M-%S')"
sql_file="/home/zzz/backups/${url}_${st}_${curr_date}.sql"
sudo -u $usr db export --path="${htmldir}"/ "$sql_file"
chown root:root "$sql_file"
someotherCommand "$curr_date"

哦,在赋值的右边双引号是可选的,但是在很多其他上下文中,使用一个没有双引号的变量可能会带来麻烦,所以我倾向于在赋值中双引号,只是为了保持一致性。

您不需要使用sudo来运行该命令,因为您已经是root用户了

su -l user -c "db export --path=${htmldir}/ /home/zzz/backups/${url}_${st}_${curr_date}.sql"
chown root:root /home/zzz/backups/${url}_${st}_$(date '+%Y-%m-%d-%H-%M-%S').sql

写得好的答案。(对匿名投票人:如果你的观点正确,你应该留下一条有用的评论。)嗨,戈登。谢谢你,写得好,解释得好
su -l user -c "db export --path=${htmldir}/ /home/zzz/backups/${url}_${st}_${curr_date}.sql"
chown root:root /home/zzz/backups/${url}_${st}_$(date '+%Y-%m-%d-%H-%M-%S').sql