小编use*_*747的帖子

在不退出脚本的情况下退出脚本中的 bash 命令

我正在编写一个脚本,该脚本查看作业文件夹(源文件),如果该文件夹存在,则它会查找目标文件夹。如果该文件夹不存在,它会将源复制到目标。

如果目标存在,它会尝试将文件从源复制到目标,在此之前,首先提示用户,以免覆盖该用户已经完成的工作。

命令的输出必须采用特定格式,因此我无法按原样使用命令的标准输出。我必须捕获它并重新格式化它。然后以特定格式输入(即 y/N)。

这样做的好处是复制命令已经做了一些有用的事情。如果文件不存在,它会进行复制。

如果一个文件或多个文件已经存在,它会反复询问“覆盖是/否?” 正是这种情况,我正在努力处理。

我已经做到了将复制命令的输出捕获到变量中并抑制其正常输出,以便我可以重新格式化其输出并将该格式回显给用户。

接下来,我的想法是我需要杀死(或以其他方式停止命令),然后以我想要的格式打印输出,然后重新调用命令,第二次,我可以在我想要的格式,然后用户可以做出他们的选择。尽管进行了搜索,但我无法弄清楚/理解一旦调用该命令时如何终止或以其他方式停止该命令。我已经尝试使用 SIGINT 进行 kill 和各种尝试。要么我只是不明白如何使用这些,要么它们不是正确的选择。当我尝试使用它们时,出现语法错误。

这是我的代码:

#!/bin/bash

USAGE="Usage: ./script2.sh [hw-name]"
EINVALID="Invalid homework: $1"
SOURCEDIRECTORY="$PUBLIC/homework/$1"
HOMEWORKDIRECTORY="$HOME/homework/$1"
COPY="$SOURCEDIRECTORY/*.*"

if [ -z "$1" ]; then
    echo $USAGE
    exit
fi

if [ ! -d "$SOURCEDIRECTORY" ]; then
    echo $EINVALID
    exit
fi

if [ ! -d "$HOMEWORKDIRECTORY" ]; then
    echo "making homework1"
    mkdir -p $HOMEWORKDIRECTORY

copyOutput2="$(eval cp -ir $COPY $HOMEWORKDIRECTORY 2>&1 &stop this
 process somehow)"
echo $copyOutput2 #temporary output for testing
Run Code Online (Sandbox Code Playgroud)

bash scripts

6
推荐指数
1
解决办法
2189
查看次数

标签 统计

bash ×1

scripts ×1