4

ターミナルで実行する一連のコマンドがあり、それらのコマンドをファイルに保存する方法と、ターミナルでそのファイルを開いたときにコマンドが実行されるようにするファイルの種類を知りたいですか?

ただし、コマンドには 2 つの入力ソースが必要で、コマンドを実行するときに手動で入力します。

ファイルを開く方法はありますか?これらの 2 つの入力を要求し、それらをコマンドに挿入してからコマンドを実行できますか?

私を助けるために必要な場合、ファイル内のコマンドは次のとおりです。

$ cd scripts/x
$ python x.py -i input -o output

したがって、ファイルを開くときに、最初にディレクトリをscripts/xに変更し、次にinputの値、次にoutputの値を尋ねてから、2番目のコマンドを実行する必要があります。

これどうやってするの?

4

2 に答える 2

2

まず、x.shお気に入りのエディターでこのファイル ( ) を作成します。

#!/bin/bash

# the variable $# holds the number of arguments received by the script,
# e.g. when run as "./x.sh one two three" -> $# == 3
# if no input and output file given, throw an error and exit
if (( $# != 2 )); then
        echo "$0: invalid argument count"
        exit 1
fi

# $1, $2, ... hold the actual values of your arguments.
# assigning them to new variables is not needed, but helps
# with further readability
infile="$1"
outfile="$2"

cd scripts/x

# if the input file you specified is not a file/does not exist
# throw an error and exit
if [ ! -f "${infile}" ]; then
        echo "$0: input file '${infile}' does not exist"
        exit 1
fi

python x.py -i "${infile}" -o "${outfile}"

次に、それを実行可能にする必要があります(詳細情報を入力man chmodしてください):

$ chmod +x ./x.sh

./x.shこれで、同じフォルダーからこのスクリプトを実行できます。

$ ./x.sh one
x.sh: invalid argument count

$ ./x.sh one two
x.sh: input file 'one' does not exist

$ ./x.sh x.sh foo
# this is not really printed, just given here to demonstrate 
# that it would actually run the command now
cd scripts/x
python x.py -i x.sh -o foo

出力ファイル名が入力ファイル名に何らかの形で基づいている場合は、コマンドラインで指定する必要がなくなることに注意してください。次に例を示します。

$ infile="myfile.oldextension"
$ outfile="${infile%.*}_converted.newextension"
$ printf "infile:  %s\noutfile: %s\n" "${infile}" "${outfile}"
infile:  myfile.oldextension
outfile: myfile_converted.newextension

ご覧のとおり、ここには改善の余地があります。たとえば、scripts/xディレクトリが実際に存在するかどうかは確認しません。また、スクリプトにファイル名を尋ねさせ、コマンド ラインでファイル名を指定したくない場合は、 を参照してくださいman read

シェル スクリプトについて詳しく知りたい場合は、BashGuideBash Guide for Beginnersを読み、その場合はBashPitfallsも確認してください。

于 2013-04-21T07:59:49.243 に答える
0
usage ()
{
  echo usage: $0 INPUT OUTPUT
  exit
}

[[ $2 ]] || usage
cd scripts/x
python x.py -i "$1" -o "$2"
于 2013-04-21T07:59:18.877 に答える