gpt4 book ai didi

shell - 将终端命令保存到打开时在终端中运行命令的文件

转载 作者:行者123 更新时间:2023-12-01 03:57:22 27 4
gpt4 key购买 nike

我有一系列在终端中运行的命令,我想知道如何将这些命令存储在文件中以及哪种文件类型中,以便在打开该文件时,在终端中运行命令?

但是这些命令需要两个输入源,我将在运行命令时手动输入这些输入源。

有没有办法打开文件,它可以问我这两个输入,然后将它们插入命令中,然后运行命令?

如果需要帮助我,文件中的命令是:

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

所以在打开文件时,我需要先将目录更改为 scripts/x,然后询问我输入的值,然后是输出的值,然后运行第二个命令。

我怎样才能做到这一点?

最佳答案

首先,在您喜欢的编辑器中创建此文件 ( 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 .

如果您想了解有关 shell 脚本的更多信息,您可能需要阅读 BashGuideBash Guide for Beginners在这种情况下,您还应该检查 BashPitfalls .

关于shell - 将终端命令保存到打开时在终端中运行命令的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16128895/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com