小编Sam*_*man的帖子

防止命令将 stdout 和 stderr 发送到任何终端或文件

我想阻止我的程序将 stdout 和 stderr 发送到任何终端、文件或设备。为此,我想到了三个命令,但我无法区分它们的区别。请你向我解释一下它们每个的含义。

# ./run > /dev/null
# ./run > /dev/null 1>&2
# ./run > /dev/null 2>&1
Run Code Online (Sandbox Code Playgroud)

command-line bash shell-script

7
推荐指数
1
解决办法
1万
查看次数

自动化修复所有损坏链接的过程

我的系统中有很多断开的链接。我写了一个脚本来重新链接所有断开的链接。但是,在脚本运行后, find 将再次向我显示链接仍然存在。

这是我的代码:

find /home/saman -lname '/home/saman/*' -exec \
   sh -c 'ln -snf "/home$(readlink "$0")" "$0"' {} \;
Run Code Online (Sandbox Code Playgroud)

运行上面的命令后,我搜索断开的链接并仍然找到它们:

find . -type l | xargs file | grep broken 
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

shell-script symlink

5
推荐指数
1
解决办法
1102
查看次数

任务不是由 crontab 运行的

crontab奇怪的是没有执行我的脚本,尽管脚本从 shell 终端运行得很好。我已经确保脚本通过一个新的行空间彼此分开。但是,我对脚本的内容表示怀疑。crontab执行run.sh稍后将运行main.sh

这是/etc/crontab

* * */3 * *        root  source /opt/db_maintain/run.sh
Run Code Online (Sandbox Code Playgroud)

这是从内部run.sh调用的内容main.sh

#!/usr/bin/env bash

#********* Saman *********
TM=$(date --date='40 days ago' '+%F %T')
TARGET=/opt/db_maintain/main.sh
TIMESTAMP=$(echo ${TM} | tr --delete ': -')
export TIMESTAMP
source $TARGET "$TM"
Run Code Online (Sandbox Code Playgroud)

这是开头main.sh

#!/bin/bash
##!/usr/bin/env bash
#
# main program entry point
#

source /opt/db_maintain/functions.sh
source /opt/db_maintain/constants.sh
source /opt/db_maintain/settings.sh
source /root/PASSWD_PGRS.sh

#read -s -t 0 -n 9999
#read -s -p …
Run Code Online (Sandbox Code Playgroud)

cron debian shell-script

2
推荐指数
1
解决办法
1235
查看次数

标签 统计

shell-script ×3

bash ×1

command-line ×1

cron ×1

debian ×1

symlink ×1