使用源文件“for file in”

时间:2016-05-18 16:53:19

标签: bash resource-files

我正在尝试在我选择的文件上运行以下代码并将其放入变量源文件中。当我将其导出时,这是为了方便用户。这是尝试添加源文件之前的代码:

for file in ~/Twitter/Users/New/*; do
    [ -f "$file" ] && sed '1,7d' "$file" | head -n -9 > ~/Twitter/Users/TBA/"${file##*/}"
done

所以我尝试添加这样的源文件:

#!/bin/bash
source ~/MYBASHSCRIPTS/Tests/scriptsettings.in
for file in $loctorem/*; do
        [ -f "$file" ] && sed '1,7d' "$file" | head -n -9 > $locdone
done
echo $loctorem
echo $locdone

将scriptsettings.in配置为:

loctorem="~/Twitter/Users/New"
locdone='~/Twitter/Users/TBA/"${file##*/}"'

我已经尝试了半旧/半新代码,但都没有工作。它真的需要硬编码才能运行吗?如果这样的话,这将把我整个“noob friendly”的想法扔进垃圾桶......

编辑---我只在最后回复它,以便我可以验证它是否正在调用正确的位置。

EDIT2 ---这是我原来运行的确切脚本。

#!/bin/bash
for file in ~/Anon/Twitter/OpISIS/New/*; do
        [ -f "$file" ] && sed '1,7d' "$file" | head -n -9 > ~/Anon/Twitter/OpISIS/TBA/"${file##*/}"
done

新变种:

source ~/MYBASHSCRIPTS/Tests/scriptsettings.in
for file in $loctorem/*; do
        [ -f "$file" ] && sed '1,7d' "$file" | head -n -9 > "$(locdone_path "$file")"
done

源文件为:

loctorem=/home/matrix/Anon/Twitter/OpISIS/New
locdone_path() { printf '%s\n' ~/Twitter/Users/TBA/"${1##*/}

正如我之前所说的那样,我仍然很新,很抱歉,如果我在这里做了一件非常愚蠢的事情......  我正在尝试将输入和输出文件夹/文件设置为用户可以更改的变量。最后这个脚本将是〜80行,我希望任何人都能够运行它而不是强迫每个人都像我一样设置目录/文件。然后我将有一个设置脚本,使文件中包含存储的变量,因此有一次设置,或者用户以后可以更改位置,但他们不必进入整个代码并更改所有内容以适应他们的系统

1 个答案:

答案 0 :(得分:1)

这里有两个问题。第一个是引号,它们阻止了波浪扩展:

# this stores a path with a literal ~ character
loctorem='~/Twitter/Users/New'

# this works
loctorem=~/Twitter/Users/New

# this works too
loctorem="$HOME/Twitter/Users/New"

第二个问题是,在$file可用之前,您需要依赖# this can be put in your sourced file locdone_path() { printf '%s\n' ~/Twitter/Users/TBA/"${1##*/}"; } 。如果要存储代码(例如,如何计算某些内容的算法),请在配置中定义一个函数:

... | head -n 9 >"$(locdone_path "$file")"

......稍后,要使用该代码,请调用函数:

loctorem=~/Twitter/Users/New
locdone=~/Twitter/Users/TBA

但是,如果您只想使目录可自定义,您可以做一些更简单的事情:

... | head -n 9 >"$locdone/${file##*/}"

function