Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将字符串从Java传递到bash脚本_Java_Linux_Shell_Unix_Scripting - Fatal编程技术网

将字符串从Java传递到bash脚本

将字符串从Java传递到bash脚本,java,linux,shell,unix,scripting,Java,Linux,Shell,Unix,Scripting,所以我有一个客户机和一个服务器Java程序。客户端使用JavaProcessBuilder执行脚本,但我的问题是用户输入需要传递给bash脚本的信息。因此,本质上,我需要知道如何将三个不同的字符串发送到bash脚本正在读取的三个不同变量。这个脚本正在复制一个文件,所以我不希望用java创建一个txt文件,而是让脚本读取该文件。我还希望有一种方法能够在OSX和Windows上运行,因此欢迎改进。我目前正在Ubuntu上使用Java7 以下是我尝试做的一个片段: .爪哇 脚本: read loc

所以我有一个客户机和一个服务器Java程序。客户端使用JavaProcessBuilder执行脚本,但我的问题是用户输入需要传递给bash脚本的信息。因此,本质上,我需要知道如何将三个不同的字符串发送到bash脚本正在读取的三个不同变量。这个脚本正在复制一个文件,所以我不希望用java创建一个txt文件,而是让脚本读取该文件。我还希望有一种方法能够在OSX和Windows上运行,因此欢迎改进。我目前正在Ubuntu上使用Java7

以下是我尝试做的一个片段: .爪哇

脚本:

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; }