2016-08-26 9 views
0

私はevalの既存のシェルスクリプトコードを作成しています。私は今のところevalが不要であり、に取り除きたいと思っています。注射。既存のコードのevalを削除する

コードを確認して、コードに評価がある理由を教えてください。

答えて

0

もし$ 1がそのようなものなら---"~/tttttttt.txtです。 FILE_PATHは~/tttttttt.txt、評価なしです。

しかしevalを指定すると、スクリプト上で実行した場合

FILE_PATH will be /home/user/tttttttt.txt 



#!/bin/bash 
path='-----"~/tttttttt.txt' 
FILE_PATH=`echo $path | awk '{ print $1 }' | cut -f2 -d'"'` 
echo "${FILE_PATH}" 
ls -lart ${FILE_PATH} 
FILE_PATH=`(eval "echo ${FILE_PATH}")` 
echo $FILE_PATH 
ls -lart ${FILE_PATH} 

、出力:*それはあなたが強制することはできません `$のPATH`についての仮定を作るためにあなたを必要とするため

~/tttttttt.txt 
ls: cannot access ~/tttttttt.txt: No such file or directory 
/home/user/tttttttt.txt 
-rw-rw-r-- 1 user user 0 Aug 26 15:54 /home/user/tttttttt.txt 
+0

は' eval'は*安全ではないと考えられています。 'eval'は'〜 'を展開させますが、' $ path'が 'rm -rf /'のようなものであればコマンドを実行します。 – chepner

+0

@chepnerありがとう、私はansを更新しました。 –

+0

はい。 $ 1には$ TOP/binのような値が入ります。絶対パスを取得するには、評価する必要があります。私の要件は、 'eval'コマンドを根絶することです。これに代わるものはありますか?私はすべてのシナリオをhttp://stackoverflow.com/questions/17529220/why-should-eval-be-avoided-in-bash-and-what-should-i-use-insteadで試しました。しかし、運がない – radhakrishnan

関連する問題