需要 chown 在 bash 脚本中创建的文件
Need to chown created file in bash script
我必须以非 root 用户身份 运行 在脚本中执行命令,否则该命令不会 运行。但是,一旦完成,我需要将后续文件 chown 给 root 用户。但是,我不确定这样做的“正确”或最佳方法是什么。
示例:
sudo -u $usr db export --path="${htmldir}"/ "/home/zzz/backups/${url}_${st}_$(date '+%Y-%m-%d-%H-%M-%S').sql"
基本上上面有各种变量替换。我还在文件中添加了时间戳。 chown 刚刚创建的文件的最佳方式是什么,因为它有一个时间戳 - 如果我 运行 a:
这可能会有所不同
chown root:root "/home/zzz/backups/${url}_${st}_$(date '+%Y-%m-%d-%H-%M-%S').sql"
如何 运行 命令并将该命令的一部分放入变量 - 输出文件名?
您应该只运行 date
命令一次,并将结果存储在一个变量中。您可以存储 just 日期:
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
我必须以非 root 用户身份 运行 在脚本中执行命令,否则该命令不会 运行。但是,一旦完成,我需要将后续文件 chown 给 root 用户。但是,我不确定这样做的“正确”或最佳方法是什么。 示例:
sudo -u $usr db export --path="${htmldir}"/ "/home/zzz/backups/${url}_${st}_$(date '+%Y-%m-%d-%H-%M-%S').sql"
基本上上面有各种变量替换。我还在文件中添加了时间戳。 chown 刚刚创建的文件的最佳方式是什么,因为它有一个时间戳 - 如果我 运行 a:
这可能会有所不同chown root:root "/home/zzz/backups/${url}_${st}_$(date '+%Y-%m-%d-%H-%M-%S').sql"
如何 运行 命令并将该命令的一部分放入变量 - 输出文件名?
您应该只运行 date
命令一次,并将结果存储在一个变量中。您可以存储 just 日期:
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