将字符串从Java传递到bash脚本
所以我有一个客户机和一个服务器Java程序。客户端使用JavaProcessBuilder执行脚本,但我的问题是用户输入需要传递给bash脚本的信息。因此,本质上,我需要知道如何将三个不同的字符串发送到bash脚本正在读取的三个不同变量。这个脚本正在复制一个文件,所以我不希望用java创建一个txt文件,而是让脚本读取该文件。我还希望有一种方法能够在OSX和Windows上运行,因此欢迎改进。我目前正在Ubuntu上使用Java7 以下是我尝试做的一个片段: .爪哇 脚本:将字符串从Java传递到bash脚本,java,linux,shell,unix,scripting,Java,Linux,Shell,Unix,Scripting,所以我有一个客户机和一个服务器Java程序。客户端使用JavaProcessBuilder执行脚本,但我的问题是用户输入需要传递给bash脚本的信息。因此,本质上,我需要知道如何将三个不同的字符串发送到bash脚本正在读取的三个不同变量。这个脚本正在复制一个文件,所以我不希望用java创建一个txt文件,而是让脚本读取该文件。我还希望有一种方法能够在OSX和Windows上运行,因此欢迎改进。我目前正在Ubuntu上使用Java7 以下是我尝试做的一个片段: .爪哇 脚本: read loc
read loc
read name
read wkspace
cd $LOC
cp $name $wkspace
您正在命令行上传递参数,但正在脚本中读取stdin。将脚本更改为:
cd $1
cp $2 $3
我看不到任何客户机/服务器交互,但让我们关注真正重要的内容:您正在将参数传递给脚本,但您的脚本正在尝试从标准输入读取参数 要解决问题,请按如下方式修改脚本:
#!/bin/sh
LOC=$1
name=$2
wkspace=$3
cd $LOC
cp $name $wkspace
有关更多详细信息,请查看
但是我们没有做任何真正需要系统特定脚本文件的事情。复制文件的最佳方法是使用Java提供的自己的机制,这样就不必担心底层操作系统
如果继续使用该脚本,则Windows系统需要另一个脚本,然后根据
os.name
system属性的值决定应运行哪个脚本。您的shell脚本有问题。read
命令从stdin读取,但您将输入作为参数传递。您也在更改loc变量的大小写。shell中的变量区分大小写。将脚本更改为以下内容:
#!/bin/sh
loc=$1
name=$2
wkspace=$3
cd "$loc" || { printf 'failed to cd to %s\n' "$loc" ; exit 1; }
cp "$name" "$wkspace" || { printf 'failed to copy %s\n' "$name" ; exit 1; }
另一方面,您不需要调用用其他语言编写的外部脚本来复制文件。您应该用java实现这一点。在java中实现这一点也将使代码具有所需的平台独立性。这不是在shell中分配变量的方式。这不是perl或php。我最近才开始编写脚本,所以这对我来说是全新的。您将如何在Java中实现这一点?我找不到任何有关从工作目录以外的目录复制文件的信息。因此搜索显示:
#!/bin/sh
loc=$1
name=$2
wkspace=$3
cd "$loc" || { printf 'failed to cd to %s\n' "$loc" ; exit 1; }
cp "$name" "$wkspace" || { printf 'failed to copy %s\n' "$name" ; exit 1; }