特定のパラメータを見つけてコマンドに渡す

特定のパラメータを見つけてコマンドに渡す

というファイルがありますテストスクリプトというプログラムを実行する必要があります。コマンドの実行次のように:

./run_command <input path>

スクリプトに次のパラメータを提供する場合:

./test_script argument1=sometext argument2=othertext inputpath=/folder1/folder2/file.txt argument4=moretext

スクリプトでパラメータを見つける方法入力パス=/folder1/folder2/file.txtそして通過/フォルダ1/フォルダ2/file.txt到着コマンドの実行? inputpath=/folder1/folder2/file.txt が常に 3 番目の位置にあるわけではなく、提供される引数の数が異なる可能性があることに注意してください。

ベストアンサー1

そしてzsh

#! /bin/zsh -
inputpath=(${${(M)argv:#inputpath=*}#*=})
(($#inputpath > 0)) && ./run-command $inputpath

すべて抽出s をinputpath=pathスクリプトの引数として使用し、空でない引数を$inputpath配列に格納します。その後、./run-commandこれらの入力パスが見つかったら、パラメータとして実行します。

POSIXlyでは、次のことができます。

#! /bin/sh -
run_with_extracted_keyword() (
  cmd="${1?}" keyword="${2?}"
  shift 2
  for arg do
    case $arg in
      ("$keyword="*) set -- "$@" "${arg#*=}"
    esac
    shift
  done
  [ "$#" -gt 0 ] && exec "$cmd" "$@"
)

run_with_extracted_keyword ./run-command inputpath "$@"

GNUlyでは、次のことができます。

#! /bin/bash -
set -o pipefail
printf '%s\0' "$@" |
  LC_ALL=C grep -zPo '^inputpath=\K(?s:.*)' |
  xargs -r0 ./run-command

おすすめ記事