比如说,我有一个文件foo.txt,指定了N个参数
arg1
arg2
...
argN
我需要传递给命令my_command
如何使用文件的行作为命令的参数?
比如说,我有一个文件foo.txt,指定了N个参数
arg1
arg2
...
argN
我需要传递给命令my_command
如何使用文件的行作为命令的参数?
当前回答
在编辑了几次@Wesley Rice的答案后,我觉得我的改变太大了,不能继续修改他的答案,而不是写我自己的答案。所以,我决定自己写一个!
读取文件中的每一行,并像这样逐行操作它:
#!/bin/bash
input="/path/to/txt/file"
while IFS= read -r line
do
echo "$line"
done < "$input"
这直接来自作者Vivek Gite: https://www.cyberciti.biz/faq/unix-howto-read-line-by-line-from-file/。功劳归他!
语法:在Bash Unix和Linux shell上逐行读取文件: 1. bash、ksh、zsh和所有其他shell逐行读取文件的语法如下 2. While read -r line;命令;Done < input.file 3.传递给read命令的-r选项可防止反斜杠转义被解释。 4. 在read命令前添加IFS= option,以防止前导/尾随空格被修剪 5. if = read -r line;do COMMAND_on $lineDone < input.file
现在来回答这个现在已经结束的问题,我也有:它是否可能' git添加'一个文件的文件列表?-这是我的答案:
Note that FILES_STAGED is a variable containing the absolute path to a file which contains a bunch of lines where each line is a relative path to a file I'd like to do git add on. This code snippet is about to become part of the "eRCaGuy_dotfiles/useful_scripts/sync_git_repo_to_build_machine.sh" file in this project, to enable easy syncing of files in development from one PC (ex: a computer I code on) to another (ex: a more powerful computer I build on): https://github.com/ElectricRCAircraftGuy/eRCaGuy_dotfiles.
while IFS= read -r line
do
echo " git add \"$line\""
git add "$line"
done < "$FILES_STAGED"
引用:
我从哪里复制了我的答案:https://www.cyberciti.biz/faq/unix-howto-read-line-by-line-from-file/ 对于循环语法:https://www.cyberciti.biz/faq/bash-for-loop/
相关:
如何逐行读取文件的内容,并做git添加它:它是可能的' git添加'从一个文件的文件列表?
其他回答
这两种解决方案即使在行中有空格时也有效:
readarray -t my_args < foo.txt
my_command "${my_args[@]}"
如果readarray不起作用,用mapfile代替它,它们是同义词。
我以前尝试过下面这个,但当my_command是一个脚本时有问题:
xargs -d '\n' -a foo.txt my_command
在我的bash shell下面的工作就像一个魅力:
cat input_file | xargs -I % sh -c 'command1 %; command2 %; command3 %;'
input_file在哪里
arg1
arg2
arg3
显然,这允许您对input_file中的每一行执行多个命令,这是我在这里学到的一个不错的小技巧。
如果你所需要做的就是将文件arguments.txt的内容
arg1
arg2
argN
进入my_command arg1 arg2 argN,然后你可以简单地使用xargs:
xargs -a arguments.txt my_command
你可以在xargs调用中添加额外的静态参数,比如xargs -a arguments.txt my_command staticArg,它将调用my_command staticArg arg1 arg2 argN
在编辑了几次@Wesley Rice的答案后,我觉得我的改变太大了,不能继续修改他的答案,而不是写我自己的答案。所以,我决定自己写一个!
读取文件中的每一行,并像这样逐行操作它:
#!/bin/bash
input="/path/to/txt/file"
while IFS= read -r line
do
echo "$line"
done < "$input"
这直接来自作者Vivek Gite: https://www.cyberciti.biz/faq/unix-howto-read-line-by-line-from-file/。功劳归他!
语法:在Bash Unix和Linux shell上逐行读取文件: 1. bash、ksh、zsh和所有其他shell逐行读取文件的语法如下 2. While read -r line;命令;Done < input.file 3.传递给read命令的-r选项可防止反斜杠转义被解释。 4. 在read命令前添加IFS= option,以防止前导/尾随空格被修剪 5. if = read -r line;do COMMAND_on $lineDone < input.file
现在来回答这个现在已经结束的问题,我也有:它是否可能' git添加'一个文件的文件列表?-这是我的答案:
Note that FILES_STAGED is a variable containing the absolute path to a file which contains a bunch of lines where each line is a relative path to a file I'd like to do git add on. This code snippet is about to become part of the "eRCaGuy_dotfiles/useful_scripts/sync_git_repo_to_build_machine.sh" file in this project, to enable easy syncing of files in development from one PC (ex: a computer I code on) to another (ex: a more powerful computer I build on): https://github.com/ElectricRCAircraftGuy/eRCaGuy_dotfiles.
while IFS= read -r line
do
echo " git add \"$line\""
git add "$line"
done < "$FILES_STAGED"
引用:
我从哪里复制了我的答案:https://www.cyberciti.biz/faq/unix-howto-read-line-by-line-from-file/ 对于循环语法:https://www.cyberciti.biz/faq/bash-for-loop/
相关:
如何逐行读取文件的内容,并做git添加它:它是可能的' git添加'从一个文件的文件列表?
下面是我如何将文件内容作为参数传递给命令:
./foo --bar "$(cat ./bar.txt)"