0
私はeval
の既存のシェルスクリプトコードを作成しています。私は今のところeval
が不要であり、に取り除きたいと思っています。注射。既存のコードのevalを削除する
コードを確認して、コードに評価がある理由を教えてください。
私はeval
の既存のシェルスクリプトコードを作成しています。私は今のところeval
が不要であり、に取り除きたいと思っています。注射。既存のコードのevalを削除する
コードを確認して、コードに評価がある理由を教えてください。
もし$ 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
は' eval'は*安全ではないと考えられています。 'eval'は'〜 'を展開させますが、' $ path'が 'rm -rf /'のようなものであればコマンドを実行します。 – chepner
@chepnerありがとう、私はansを更新しました。 –
はい。 $ 1には$ TOP/binのような値が入ります。絶対パスを取得するには、評価する必要があります。私の要件は、 'eval'コマンドを根絶することです。これに代わるものはありますか?私はすべてのシナリオをhttp://stackoverflow.com/questions/17529220/why-should-eval-be-avoided-in-bash-and-what-should-i-use-insteadで試しました。しかし、運がない – radhakrishnan