在脚本中退出bash命令而不退出脚本

用户836747

我正在研究一个查看家庭作业文件夹(源文件)的脚本,如果该文件夹存在,则它将寻找目标文件夹。如果该文件夹不存在,它将源复制到目标。

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

命令的输出必须为特定格式,因此我不能按原样使用命令的标准输出。我必须抓住它并重新格式化。然后以特定格式输入(即y / N)。

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

如果一个文件或多个文件已经存在,它将反复询问“是否覆盖y / n?”。我正在尝试处理的就是这种情况。

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

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

这是我的代码:

#!/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
塞尔吉(Sergiy Kolodyazhnyy)

如果确实确实需要cp使用自定义消息进行自定义,则可以从源代码重新编译程序,但是更明智的方法是printf最好通过编写自己的消息,而不是尝试截取其cp输出。 ,并通过select对话框处理用户的选择此外,如果您要输出错误消息,则应将其stderr流式传输。最后,这*.*是不必要的,您可以只使用*glob来代替。

以下是带有几个编辑的脚本。请注意,您需要取消注释#cp "$item" "$HOMEWORKDIRECTORY"行才能进行实际复制。出于测试目的cp,请echo首先替换

#!/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" > /dev/stderr
    exit 1
fi

if [ ! -d "$SOURCEDIRECTORY" ]; then
    echo "$EINVALID" > /dev/stderr
    exit 2
fi

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

for item in "$SOURCEDIRECTORY"/*; do
    skip=true
    if [ -f "$HOMEWORKDIRECTORY"/"${item##*/}" ]; then
        printf "%s already exists in %s.\n" "$item" "$HOMEWORKDIRECTORY"

        select choice in  "overwrite" "skip"; do
            case "$choice" in 
                "overwrite")  echo "Overwriting."  
                              break;;
                "skip") skip=true; break;;
            esac
        done
    fi

    if [ "$skip" = "true" ]; then
        continue
    fi
    echo cp "$item" "$HOMEWORKDIRECTORY"

done

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在脚本中退出bash命令而不退出脚本

来自分类Dev

不退出 shell 脚本

来自分类Dev

在bash中,退出脚本而不退出外壳,或者从子外壳中导出/设置变量

来自分类Dev

从菜单中调用退出脚本而不退出菜单

来自分类Dev

从菜单中调用退出脚本而不退出菜单

来自分类Dev

子脚本之一失败时不退出bash脚本

来自分类Dev

如何在不退出脚本本身的情况下取消脚本中的命令?

来自分类Dev

TCSH脚本不退出

来自分类Dev

CasperJS脚本永不退出

来自分类Dev

为什么(退出1)不退出脚本?

来自分类Dev

发送退出代码而不退出脚本

来自分类Dev

为什么此bash脚本不退出?

来自分类Dev

在Ruby Shell脚本中运行OS X`say`命令而不退出

来自分类Dev

bash脚本中的退出状态

来自分类Dev

Bash在脚本中退出sudo

来自分类Dev

Bash脚本不会在输入命令中退出

来自分类Dev

Bash脚本在命令失败时退出(sshpass)

来自分类Dev

困惑为什么脚本不退出

来自分类Dev

从使用$()的bash脚本退出

来自分类Dev

在不退出终端的情况下退出错误句柄功能中的外壳脚本

来自分类Dev

防止脚本中的“退出”命令关闭 Cmd

来自分类Dev

Bash脚本(使用Java命令)不会退出(脚本2)

来自分类Dev

在bash脚本中退出案例后SSH退出

来自分类Dev

在bash脚本中,脚本退出后,在提示符下打印命令(作为建议)

来自分类Dev

在bash脚本中,脚本退出后在提示符下打印命令(作为建议)

来自分类Dev

如何从bash脚本中退出ssh?

来自分类Dev

在bash脚本中从curl获取退出代码

来自分类Dev

退出脚本时杀死bash脚本中的后台进程

来自分类Dev

Bash脚本退出清理

Related 相关文章

热门标签

归档