Mine.zshrc
現在のディレクトリまたは現在のパスの親ディレクトリに存在する場合と存在しない可能性がある実行可能ファイルを検索して実行するコマンドを生成します。実行可能ファイルがある場合は検索するロジックがありますが、実行しようとすると次のエラーが発生します。
/Users/username/some/directory/executable_file を使用します。
function_name:15: ファイルまたはディレクトリが存在しません: /Users/username/some/directory/executable_file
次のコードで生成されます。
if [[ $current_path != / ]]
then
echo "Using $current_path/executable_file"
"$current_path/executable_file $@"
しかし、パスをコピーして貼り付けるか、sudoで関数を実行すると完全に機能するため、パスは正確です。sudo -u
スクリプトで現在のユーザーとして関数を実行しようとしましたが、まだ失敗しました。
ユーザーが手動で入力したように、または少なくともsudoとパスワードなしで実行可能なスクリプトを実行するにはどうすればよいですか?
ベストアンサー1
この行を囲む引用:
"$current_path/executable_file $@"
検索して実行する項目(さまざまな変数の拡張後)である二重引用符の間にすべての項目があることをシェルに通知します。
最も簡単な場合、関数にパラメータがない場合は実行を試みます。
"$current_path/executable_file "
$current_path/executable_file
...ファイル自体が存在しても後ろにスペースがあるため失敗する可能性があります。
パラメータを渡すと、そのファイルが存在する可能性がはるかに少なくなります。例:
"$current_path/executable_file arg1 arg2 arg3..."
$current_path
変数の拡張を保護しますが、実行可能ファイル名が次の場所で終わるように引用符を並べ替えます。
"$current_path/executable_file" "$@"