编辑

编辑

我在 Ubuntu 上创建了一些脚本。当我在 Kali 和 Debian 上使用它们时,我发现eval我使用的从格式化文本文件中提取数据的命令效果不佳。有人知道如何让它在基于 Debian 的系统上运行吗?

我如何使用eval(小例子)

#!/bin/bash
basename=$(basename $0)
dirname=$(dirname $0)
if [[ $EUID -gt 0 ]];
then
    exec sudo "$dirname/$basename" "$@"
fi
myscript=$dirname/$basename
function getlistof () {
    awk "/^#BEGIN-$1#/, /^#END-$1#/" $myscript | grep -v '#BEGIN\|#END' | grep "$2"
}
getlistof log mylink | while read mylink # here mylink='mylink=(source=... destn=....) (var)'
    do
        eval "$mylink" # and here should become mylink='(source=... destn=....)(array)'
        eval "${mylink[*]}" # and here the script should know about vars inside the array!
        echo " $source $destn"
    done
exit
#BEGIN-log#
mylink=(source=sources_one destn=destn_one)
mylink=(source=source_two destn=destn_two)
#END-log#

这是这个脚本在 ubuntu 上的输出

 younes@unix:~$ ./myscript
 sources_one destn_one
 source_two destn_two

消息

当我试图简化问题时,我正在解决它kali Linux通过 chroot 环境!

younes@unix:~$ lsb_release -srci
Ubuntu
15.04
vivid
younes@unix:~$ ./myscript
 sources_one destn_one
 source_two destn_two
younes@unix:~$ sudo cp -f myscript /.Kali-2.0-sana/home/younes/
younes@unix:~$ chroothere /.Kali-2.0-sana
root@unix:/# lsb_release -srci
Kali
2.0
sana
root@unix:/# /home/younes/myscript 
 sources_one destn_one
 source_two destn_two
root@unix:/# 

感谢编辑老师的帮助者,感谢您在这里写的每一个字节!

答案1

编辑

用户已广泛更改了他的问题,此答案是对用户发布的代码的编辑,该代码现在不再存在于他的问题中。

有新代码,问题已更改为其他内容。

因此,这个答案应该被视为旧的(且无效的)代码。

原来的

如果我正确理解了您的代码。
您使用 eval 只是为了获取代码中两个变量的值。
这被视为“不良做法”。

如果您将源文件更改为:

LINK=(SRC=/.hd/home/younes/.conky DST=/home/younes/.conky)

/.hd/home/younes/.conky /home/younes/.conky

或者即使您在此处文档中插入一对值,此代码也会在不进行 eval 的情况下执行相同的操作:

while read SRC DST
do
    [[ ! -e $SRC ]] && [[ ! -e $DST ]] && echo "oOpsS! $DST" && exit
    [[ ! -e $SRC ]] &&  mv "$DST" "$SRC"
    [[ ! -e $DST ]] &&  $LINKIT "$SRC" "$DST"
    ls -l "$DST" | grep "$SRC" &>/dev/null || $LINKIT "$SRC" "$DST"
done <<\_list_of_dir_pairs_
/.hd/home/younes/.conky             /home/younes/.conky
/.hd/home/younes/.fonts             /home/younes/.fonts
/.hd/home/younes/.thumbnails        /home/younes/.thumbnails
/.hd/home/younes/.xbindkeys         /home/younes/.xbindkeys
/.hd/home/younes/.xbindkeys_config  /home/younes/.xbindkeys_config
/.hd/home/younes/.xbindkeysrc       /home/younes/.xbindkeysrc
_list_of_dir_pairs_

并且,如果您确实需要数组 LINK,请执行以下操作:

LINK=($SCR $DST)

请注意,我在 mv 和 LINKIT 中引用了 SRC 和 DST 的 var 扩展,并将 LINKIT 更改为 $LINKIT (我假设这是一个变量,而不是函数。如果需要,请改回来)。

相关内容