0

現在のパスを保存し、それを入力したユーザーと比較することに問題があります。現時点で私が持っている

cd $path
checkpath="$(pwd)"
if [ "$checkpath" == "$path" ]; then
chown -Rv $user *

$path はユーザーが入力します。スクリプトは毎回上記の時点で失敗し、その理由がわかりません。ユーザーが入力したパスの下で chown 部分が実際に実行されることを確認する方法が必要なだけです。

編集: $path にはユーザーが入力したパスが含まれ、checkpath には pwd によって生成された出力が含まれている必要があります。要するに、はい、私は cd コマンドが機能し、その chown が、要求されたときに書き込みを使用したディレクトリで実行されることを確認しようとしています。

4

2 に答える 2

1
cd "$path" && chown -Rv "$user" *

これは、コマンドが成功したchown場合にのみ実行されます。cd同じことを書く他の方法:

if cd "$path"; then
    chown -Rv "$user" *
fi

また

cd "$path" || exit
chown -Rv "$user" *

また

#!/bin/bash -e
cd "$path"
chown -Rv "$user" *

最後はシェルの-eフラグを設定します。これにより、コマンドが失敗した場合、続行するのではなく、すぐに終了します。

于 2015-09-08T17:01:34.010 に答える
0

指定する $path はフル パスである必要があり、それのみが成功し、さらに end に「fi」を追加する必要があります。次のようになります。

./script.sh  /path_to_be_given user

cat script.sh

#!/bin/bash
path=$1
user=$2
cd $path
checkpath="$(pwd)"
echo "Parameter passed : path => $path ; user => $user ; checkpath =>    $checkpath "
if [ "$checkpath" == "$path" ]; then
    echo "chown -Rv $user *"
    chown -Rv $user *
    if [ $? -eq 0 ]; then
        echo "Ownership changed"
    fi 
fi

これで問題が解決することを願っています

于 2015-09-08T19:35:57.153 に答える