9

我正在尝试将一个文件复制到另一个目录并在调用中断时收到错误消息。

剧本 :

#!/bin/bash


PATH=~/MkFile/

exitfn () {
    trap SIGINT              # Resore signal handling for SIGINT
        echo ; echo 'Called ctrl + c '    # Growl at user,

        cp ./BKP/temp.txt $PATH/backup.txt
            exit                     #   then exit script.
}

trap "exitfn" INT            # Set up SIGINT trap to call function.ii



    read -p "What? "

    echo "You said: $REPLY"
# reset all traps## 


    trap - 0 SIGINT

输出 :

./signal.sh
What? ^C
Called ctrl + c
./signal.sh: line 9: cp: command not found

你知道这个脚本有什么问题吗?

4

2 回答 2

18

您修改了 PATH 变量,这就是原因。也许您只想为其添加另一条路径:

PATH=$PATH:~/MkFile/

或者如果 in Bash,只需使用附加运算符:

PATH+=:~/MkFile/

想一想,我认为您实际上并不想使用 PATH 变量。只需使用另一个参数名称:

DIR=~/MkFile/

有些人会建议只使用小写字母以避免与内置 shell 变量冲突:

path=~/MkFile/

从手册:

PATH    A colon-separated list of directories in which the shell looks for
        commands.  A zero-length (null) directory name in the value of PATH
        indicates the current directory. A null directory name may appear
        as two adjacent colons, or as an initial or trailing colon.
于 2014-08-13T08:54:08.940 回答
7

在 Linux 中,$PATH 是一个环境变量,它保存用于搜索可执行文件的目录(参见例如http://www.linfo.org/path_env_var.html)。

我真的不知道您的目的是否是更改 PATH 变量。如果是,则应遵循 konsolebox 答案,但如果不是,则应避免在脚本中使用环境变量作为变量。尝试改用:

路径=~/MkFile/

或者

MYPATH=~/MkFile/

于 2014-08-13T09:04:14.743 回答