我有脚本在许多循环中使用的命令,并希望将其导出。
#!/bin/bash
export COMMAND=$(many programs $FILE)
# And use this command latter like this:
for FILE in ./*;
do
eval $"COMMAND"
done
我无法导出此命令,因为我从此命令中的程序中收到错误(请提供输入)。
如何将COMMAND导出其中的变量?
修改
我使用过@Charles Duffy的答案,但还有一个问题:
your_command() {
do_something_with "$1"
do_something_else_with "$1"
}
export -f your_command
for i in $(seq 1 $Times); do
for file in ./*; do
your_command "$file"
done
done
当Times
= 1循环工作正常时,但Times
= 2 your_command
时不保存输出(第一个循环有输出,第二个循环没有输出)
答案 0 :(得分:4)
您的command
应该是一个函数,而不是一个变量。
your_command() {
do_something_with "$1"
do_something_else_with "$1"
}
for file in ./*; do
your_command "$file"
done
如果您确实需要将其导出(可用于子流程),则可以使用以下命令执行此操作:
export -f your_command
答案 1 :(得分:1)
首先关闭 - 你应该使用一个函数,如其他答案中所述。也就是说,也可以修复你拥有的东西。您可能不应该使用$()
。你拥有它的方式,你的“许多程序”将在初始化COMMAND
时立即运行,并且你将保存它们的输出,而不是命令行本身。除此之外,此时尚未设置$FILE
。以下是您的脚本的修改版本:
#!/bin/bash
COMMAND='many programs "${FILE}"'
# And use this command later like this:
for FILE in *
do
eval ${COMMAND}
done
我对您的脚本所做的更改:
export
{}
放在变量名称旁边${FILE}
,以防名称中包含空格的文件$()
并将其替换为''
for
循环列表从*
更改为./*
以减少输入