[linux] 파일의 줄을 명령의 인수로 어떻게 사용합니까?
인수를 foo.txt
지정 하는 파일이 있습니다.N
arg1
arg2
...
argN
내가 명령에 전달해야 my_command
파일의 줄을 명령의 인수로 어떻게 사용합니까?
답변
쉘이 bash (다른 것들 중에서)라면 바로 가기는 $(cat afile)
입니다 $(< afile)
.
mycommand "$(< file.txt)"
‘명령 대체’섹션의 bash 매뉴얼 페이지에 설명되어 있습니다.
또는 stdin에서 명령을 읽도록하십시오. mycommand < file.txt
답변
이미 언급했듯이 백틱 또는을 사용할 수 있습니다 $(cat filename)
.
언급되지 않았으며 주목해야 할 것은 쉘이 공백에 따라 해당 파일의 내용을 분리하고 명령에 찾은 각 “단어”를 인수로 제공한다는 점을 기억해야한다는 것입니다. 또한 공백, 이스케이프 시퀀스 등을 포함 할 수 있도록 명령 줄 인수를 따옴표로 묶을 수는 있지만 파일을 읽더라도 동일한 작업을 수행하지는 않습니다. 예를 들어 파일에 다음이 포함 된 경우
a "b c" d
당신이 얻을 인수는 다음과 같습니다
a
"b
c"
d
각 줄을 인수로 가져 오려면 while / read / do 구문을 사용하십시오.
while read i ; do command_name $i ; done < filename
답변
command `< file`
stdin에서 명령에 파일 내용을 전달하지만 줄 바꿈을 제거하므로 각 줄을 개별적으로 반복 할 수 없습니다. 이를 위해 ‘for’루프를 사용하여 스크립트를 작성할 수 있습니다.
for line in `cat input_file`; do some_command "$line"; done
또는 (여러 줄 변형) :
for line in `cat input_file`
do
some_command "$line"
done
또는 ( $()
대신에 여러 줄 변형 ``
) :
for line in $(cat input_file)
do
some_command "$line"
done
참고 문헌 :
답변
당신은 백틱을 사용하여 그렇게합니다 :
echo World > file.txt
echo Hello `cat file.txt`
답변
가능한 모든 명령 줄 인수 (공백이있는 값, 줄 바꿈이있는 값, 리터럴 따옴표 문자가있는 값, 인쇄 할 수없는 값, glob 문자가있는 값 등)에 대해 강력한 방법 으로이 작업을 수행하려면 약간의 가치가 있습니다. 더 흥미로운.
인수 배열이 주어지면 파일에 쓰려면 다음을 수행하십시오.
printf '%s\0' "${arguments[@]}" >file
… 교체 "argument one"
, "argument two"
적절하게, 등.
해당 파일에서 읽고 해당 내용을 사용하려면 (bash, ksh93 또는 배열이있는 다른 최신 쉘) :
declare -a args=()
while IFS='' read -r -d '' item; do
args+=( "$item" )
done <file
run_your_command "${args[@]}"
해당 파일에서 읽고 내용을 사용하려면 (배열이없는 쉘에서) 로컬 명령 줄 인수 목록을 덮어 쓰므로 함수 내부에서 수행하는 것이 가장 좋습니다. 따라서 함수의 인수를 덮어 쓰지 않아야합니다. 전체 목록) :
set --
while IFS='' read -r -d '' item; do
set -- "$@" "$item"
done <file
run_your_command "$@"
그 주 -d
(다른 끝 (end-of-line) 구분 기호를 사용할 수 있도록)는 비 POSIX 확장하고, 배열이없는 쉘은 또한 그것을 지원하지 않을 수 있습니다. 이 경우 NUL로 구분 된 내용을 eval
안전한 형식 으로 변환하기 위해 쉘이 아닌 언어를 사용해야 할 수도 있습니다 .
quoted_list() {
## Works with either Python 2.x or 3.x
python -c '
import sys, pipes, shlex
quote = pipes.quote if hasattr(pipes, "quote") else shlex.quote
print(" ".join([quote(s) for s in sys.stdin.read().split("\0")][:-1]))
'
}
eval "set -- $(quoted_list <file)"
run_your_command "$@"
답변
다음은 파일의 내용을 명령의 인수로 전달하는 방법입니다.
./foo --bar "$(cat ./bar.txt)"
답변
당신이해야 할 모든 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