在这种情况下如何处理恶意文件名

时间:2014-06-21 08:26:37

标签: bash directory

" $ BIN"' / TEMP-得到'

#!/bin/bash

OPTIONS=''

function help {
  {
  echo 'temp-get $NAME?'
  echo ' -> get the temp directories with the prefix'
  echo '( if multiple directories with prefix exist       '
  echo '  they will be returned in reverse chronological  ' 
  echo '  order                                          )'
  } >&2
}

OPTIONS=''

__DIRNAME=$(
SOURCE="${BASH_SOURCE[0]}"
while [ -h "$SOURCE" ];do
__DIRNAME="$(builtin cd -P "$(dirname "$SOURCE")" && pwd)"
SOURCE="$(readlink "$SOURCE")"
[[ "$SOURCE" != /* ]] && SOURCE="$__DIRNAME/$SOURCE"
done
echo "$( builtin cd -P "$( dirname "$SOURCE")" && pwd )"
)
source "$__DIRNAME"'/_config_'

OPTERR=1

(( ${#flags} )) && {
  while getopts $OPTIONS opt ${flags[@]}; do
    case $opt in
       -)
            case "${OPTARG}" in
              *)
              echo 'Invalid long option: -'"$opt$OPTARG" >&2
              help
              exit 1
              ;;
            esac
        ;;
       h)
        help
        exit 1
        ;;
      \?)
        echo 'Invalid option: '"$OPTARG" >&2
        help
        exit 1
        ;;
    esac
  done
}

OPTIND=0;unset OPTARG

set -o pipefail


[ -n "${1-}" ] && {
  echo "$PATH_TO_TEMP"'/'*'-'"$1" | tr ' ' '\n' | sort -r
} || {
  echo "$PATH_TO_TEMP"'/'* | tr ' ' '\n' | sort -r
}

exit $?

危险的cmd

list=( "`"$BIN"'/temp-get' "${1-}"`" )

for dir in ${list[@]} ; do 
  echo $dir
  echo --
done;

恶意文件夹

mkdir "`echo -e 'got\nyou'`"

我特别不确定在解析temp-get的输出或在危险命令中处理这个问题。理想情况下,我想将这个错误的文件名称视为没有任何问题(技术上没什么)。

1 个答案:

答案 0 :(得分:4)

免责声明:最佳方式通常是使用不同的编程语言 - 遗憾的是handling arbitrary filenames in Bash过于复杂。

在您的特定情况下,您可以处理的位置在temp-get - 必须输出NUL分隔的文件名列表才能够处理父脚本中的任意文件名。任何其他分隔符都可以是路径的一部分。然后父脚本可以循环遍历该输出,而不是将其放入数组中,而是将其传递给while IFS= read -r -d''