代码之家  ›  专栏  ›  技术社区  ›  Jamie

在bash中使用文件内容作为命令行参数

  •  6
  • Jamie  · 技术社区  · 16 年前

    我想知道如何使用一个文件的内容作为命令行参数,但在语法方面有困难。

    假设我有以下信息:

    # cat > arglist
    src/file1 dst/file1
    src/file2 dst/file2
    src/file3 dst/file3
    

    如何使用中每行的内容 arglist 文件作为参数,例如, cp 命令?

    5 回复  |  直到 16 年前
        1
  •  8
  •   matja    16 年前

    xargs的“-n”选项指定每个命令使用多少个参数:

    $ xargs -n2 < arglist echo cp
    
    cp src/file1 dst/file1
    cp src/file2 dst/file2
    cp src/file3 dst/file3
    
        2
  •  3
  •   Stephan202 Alex Martelli    16 年前

    使用 read (这假定文件名中的任何空格 arglist 逃走了:

    while read src dst; do cp "$src" "$dst"; done < argslist
    

    如果文件中的参数顺序正确,并且带空格的文件名被引用,那么这也将起作用:

    while read args; do cp $args; done < argslist
    
        3
  •  1
  •   Aif    16 年前

    您可以使用管道():

    cat file | echo
    

    或输入重定向(<)

    cat < file
    

    xargs

    xargs sh -c 'emacs "$@" < /dev/tty' emacs
    

    然后可以使用awk获取参数:

    cat file | awk '{ print $1; }'
    

    希望这有帮助。

        4
  •  0
  •   ghostdog74    16 年前

    如果你的目的只是要控制列表中的那些文件

    $ awk '{cmd="cp "$0;system(cmd)}' file
    
        5
  •  0
  •   NawaMan    16 年前

    使用 for 循环带 IFS (内部字段分隔符)设置为 new line

    OldIFS=$IFS # Save IFS
    $IFS=$'\n' # Set IFS to new line
    for EachLine in `cat arglist"`; do
    Command="cp $Each"
    `$Command`;
    done
    IFS=$OldIFS
    
    推荐文章