スクリプトがあります。
#! /bin/bash
sudo chown -R $USER:$USER /opt/Folder
chownが実行されていないようです。
端末で上記の行を書くと正常に実行されます!
私が読んでこれしかし、それは役に立ちませんでした。
スクリプト名はmysetup.shで実行中です sudo sh mysetup.sh
。
いかなる出力も提供しません。
このように実行すると、次のような結果がsudo bash -x mysetup.sh
得られます。
sudo chown -R root:root /opt/Folder
この質問は関係ありませんこれ、ユーザーが設定したためです。
答え1
/opt/Folder
コンテンツを次に変更しようとしています。あなた自身ユーザーIDではありませんか?
これはあなたの命令です:
sudo chown -R $USER:$USER /opt/Folder
$USER
コマンドが実行される前に変数が評価されるため、コマンドラインで機能するため、次のように動作します(ユーザー名が仮定されますgeorge
)。
sudo chown -R george:george /opt/Folder
一方、runコマンドを使用すると、sudo
何よりも変数に$USER
ターゲットユーザーの値があります(この場合は)root
。したがって、実行するとrootとしてsudo bash mysetup.sh
実行されるため、mysetup.sh
コマンドランタイムは次のように$USER
設定され評価されます。root
sudo chown -R root:root /opt/Folder
あなたの場合の解決策は、スクリプト全体を実行せずに、必要に応じてスクリプトにsudo
高い権限で特定のコマンドを実行させることです。sudo
つまり、代わりにbash mysetup.sh
を使用してくださいsudo bash mysetup.sh
。
答え2
実行中のLinux(またはUnix)のディストリビューションとバージョンについては言及していないので、ここではトピックから抜け出し、次の行は/etc/sudoers
Defaults requiretty
したがって、ttyがなければsudoを実行することはできません。スクリプトで実行しようとすると、コマンドが実行sudo
されず、chown
コマンドが効果的に破損します。
sudoコマンドを追加または切り替えてみてください-t
。-tt
これはコマンドチェーンを実行して成功することができる疑似端末を生成しますが、sudo
このオプションにはここで説明されていない副作用もあります。必要に応じて検索できます。
構成にアクセスできる場合は、sudo
上記の行を取り出して最良の解決策を得ることができますが、これにより、いくら弱い障害物であっても、1層の障害物が除去されます。