bash 使用文件名作为输入

bash 使用文件名作为输入

我想获取的输出

hg resolve -l

其格式为

R somefile/filename
U somefile/filename
R somefile/filename
U somefile/filename

并能够使用以“U”开头的第一行作为参数,所以我可以做类似的事情

open -t <first U file>

hg resolve -m <first U file>

如果有人能给我一些关于执行此操作的最佳方法的指示,那就太好了。

编辑:以下答案中的解决方案,一个简单的脚本。

#!/bin/bash

# Script that gets the first file from hg resolve | grep U and passes to default text editor

first_u_file=$(hg resolve -l | grep -m1 '^U')
first_u_file=${first_u_file#U }
echo opening \'$first_u_file\'
open -t "$first_u_file"

答案1

使用 GNU grep,你可以尝试这个(未经测试):

first_u_file=$(hg resolve -l | grep -m1 '^U')
first_u_file=${first_u_file#U }

-mX告诉grep打印 X 行后停止,在本例中为 1。该$(...)结构类似于反引号,它将输出转换为字符串。第二行删除文件名开头的“U”。

答案2

一个更简单的解决方案:

u_file=$( hg resolve -l | awk '/^U/{print $2; exit}' )

答案3

hg resolve -l | egrep '^U.*' | head -n 1

输出是第一个U文件

将其用作open删除“U”的参数:

firstUfile=`hg resolve -l | egrep '^U.*' | head -n 1 | sed -e 's/^U\s+\(.*\)$/"\1"/'`
open -t $firstUfile

答案4

您的脚本不仅可以打开第一个文件,还可以迭代所有未解析的文件:

#!/bin/bash

while read; do
    file="${REPLY#U }"
    echo "Opening '$file'"
    open -t "$file"      
    hg resolve -m "$file"
done <( hg resolve -l | grep "^U" )

(我不熟悉hg; 只会hg resolve -aln为您提供没有“U”前缀的未解析文件列表?这将消除对 grep 和 U 剥离步骤的需要。)

相关内容