我在 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 (我假设这是一个变量,而不是函数。如果需要,请改回来)。