web-dev-qa-db-ja.com

スクリプトやスクリプティングがインサイドバッシュから期待する予定のBash変数を渡す

このスクリプトは、Mac OSの読み取り/書き込み可能ドライブとして自分のサーバーの内容を自宅にマウントすることを目的としています。残念ながら、私の家に動的なパブリックIPアドレスがあるという事実のため、サーバーのIPアドレスは時々変化します。私の解決策は、ファイルからIPアドレスを読むことによってスクリプト機能を作ることです。私は予想されるスクリプトを使用していたときに私はすべてが働いていましたが、私のファイルからの変数を期待して読み取る方法を見つけることができませんでした。これが私のコードです:

#!/bin/bash

file=/Users/cm4nxd/Library/Scripts/current.ip
ipaddress=$(<"$file")

/usr/bin/expect <<EOD

spawn Sudo sshfs -o StrictHostKeyChecking=accept-new cm4nxd@$ipaddress:/ /Volumes/ryzen-server -oallow_other -oauto_xattr -ovolname=ryzen-server
expect "*?assword:"
send "password\r"
expect eof

EOD

echo 'yes' >> /Users/cm4nxd/Library/Scripts/done.info
 _
1
  1. 環境を通して値を渡します。

    ipaddress=$(<"$file")
    export ipaddress
    
    /usr/bin/expect <<'EOD'
    
    spawn Sudo sshfs -o StrictHostKeyChecking=accept-new cm4nxd@$env(ipaddress):/ /Volumes/ryzen-server -oallow_other -oauto_xattr -ovolname=ryzen-server
    # ..........................................................^^^^^^^^^^^^^^^
     _

    (17時間後に編集) - 'EOD'引用符で囲む必要があります。その本質的に一重は、シェルが期待の変数を展開しないように、HEREDOC全体を引用します。

  2. シェルを必要としない:期待してファイルを読む

    #!/usr/bin/env expect
    
    set fh [open /Users/cm4nxd/Library/Scripts/current.ip r]
    gets $fh ipaddress
    close $fh
    
    spawn ... user@$ipaddress ...
     _
1
glenn jackman