ネストしたシェルスクリプトのエスケープ方法

投稿者: Anonymous

サービスの起動コマンドで以下の処理を行いたくて

for e in $(conda env list | grep mlflow | awk '{ print $1 }')
do
  echo "conda env remove -n $e"
  conda env remove -n $e
done

というコマンドを bash -c の中に入れたいんですがうまくエスケープできません

/bin/bash -c "source /home/ec2-user/.bash_profile; 
  for e in $(conda env list | grep mlflow | awk '{ print $1 }') 
  do 
    echo 'conda env remove -n $e' 
    conda env remove -n $e 
  done"
/bin/bash -c 'source /home/ec2-user/.bash_profile; 
  for e in $(conda env list | grep mlflow | awk '{ print $1 }') 
  do 
    echo "conda env remove -n $e" 
    conda env remove -n $e 
  done'

あたり試したのですが
どちらも
env: -c: line 4: syntax error: unexpected end of file
というエラーになってしまいます


command=/bin/bash -l --'EOF'
  for e in $(conda env list | grep mlflow | awk '{ print $1 }')
  do
    echo "conda env remove -n $e"
    conda env remove -n $e
  done
EOF

と書いてみましたが

Source contains parsing errors: 
[line  9]: 'EOFn'

となってしまいます

解決

awk をやめれば内側で ‘ が必要なくなって全体を ‘ でかこめるんじゃないですか?
例えばこんな感じとか

command=/bin/bash -l -c '
  conda env list | grep mlflow | while read e p
  do
    echo "conda env remove -n ${e}"
  done'
回答者: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *