相关疑难解决方法(0)

如何访问您在Bash中采购的文件的基本文件名?

我在bash终端中寻找一个需要导出一些环境变量的文件.

例:

source linux_x86.env
Run Code Online (Sandbox Code Playgroud)

env文件看起来有点像这样:

export ARCH=/home/user/project/linux_x86
Run Code Online (Sandbox Code Playgroud)

我有一堆不同的体系结构要编译,我希望能够做到这样的事情:

export ARCH=/home/user/project/`basename $0 .env`
Run Code Online (Sandbox Code Playgroud)

哪里basename $0 .env会给我env文件的基本名称

bash linux_x86.env
linux_x86
Run Code Online (Sandbox Code Playgroud)

上面的工作是一个bash脚本,但是当你获取文件时它似乎不起作用.

有没有办法从源头获得相同的行为?

linux bash command-line environment-variables

8
推荐指数
1
解决办法
4983
查看次数

如何使用其所在目录的工作目录执行任意脚本?

我需要从bash执行一个groovy脚本文件,我需要脚本有一个它所在目录的工作目录.

也就是说,在我的bash脚本中,我这样做:

/opt/script/myscript.groovy &
Run Code Online (Sandbox Code Playgroud)

但这似乎将工作目录设置为/etc/init.d我正在调用的目录.如何将该脚本的工作目录更改为/opt/script

linux bash groovy

8
推荐指数
2
解决办法
2万
查看次数

如何创建AppleScript或Command文件以在Mac OS上启动Java应用程序?

我创建了一个Java应用程序,需要准备它在任何操作系统上运行.对于Windows,我创建了一个这样的批处理文件launch-win32.bat:

@echo off
javaw -Xss1024k -Xmn256m -Xms512m -Xmx1024m -cp lib/*;bin/myjar-latest.jar my.package.MyMainClass
Run Code Online (Sandbox Code Playgroud)

对于linux我创建了一个这样的shell脚本launch-linux.sh:

#!/bin/sh
java -Xss1024k -Xmn256m -Xms512m -Xmx1024m -cp lib/*:bin/myjar-latest.jar my.package.MyMainClass
Run Code Online (Sandbox Code Playgroud)

现在我认为MacOS与linux非常相似,因为它们都是基于unix的,我问一个带有mac的朋友尝试运行shellscript来启动我的应用程序.但它失败了以下NoClassDefFoundError:

Exception in thread "main" java.lang.NoClassDefFoundError: my/package/MyMainClass
Caused by: java.lang.ClassNotFoundException: my.package.MyMainClass
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
Run Code Online (Sandbox Code Playgroud)

看起来java命令的语法不正确,因为类路径未正确添加到java程序中.我现在的主要问题如下:

  1. Sun/Oracle没有正式支持MacOS,这就是为什么很难找到一些好的文档.(我需要最新的JRE 7).
  2. 我从未使用任何Mac或没有任何试用它如何工作.

所以现在我的问题是:

  1. 如何在MacOS中从命令行运行java,正确的语法是什么?或者为什么上面的命令不起作用?(例如,Windows和Linux之间的主要区别是对类路径使用分号;而不是冒号:分隔符.)
  2. 应如何命名MacOS脚本文件?.sh或者.scpt或者 .command在linux中,只要你chmod +x的脚本文件,文件结尾无关紧要?

谢谢你的任何提示.

java macos shell applescript noclassdeffounderror

8
推荐指数
1
解决办法
2万
查看次数

在被另一个bash脚本调用后获取当前的文件目录

所以我有一个bash脚本调用另一个bash脚本.第二个脚本位于不同的文件夹中.

script1.sh:
"some_other_folder/script2.sh"
# do something

script2.sh:
src=$(pwd) # THIS returns current directory of script1.sh...
# do something
Run Code Online (Sandbox Code Playgroud)

在第二个脚本中它有行src=$(pwd),因为我从另一个目录中的另一个脚本调用该脚本,所以$(pwd)返回第一个脚本的当前目录.

有没有办法在该脚本中使用简单命令获取第二个脚本的当前目录而不必传递参数?

谢谢.

directory bash pwd

8
推荐指数
2
解决办法
5989
查看次数

autoenv甚至在子文件夹中执行

我使用autoenv进行自动virtualenv激活.Python项目的顶级文件夹.env包含以下内容的文件

source venv/bin/activate
Run Code Online (Sandbox Code Playgroud)

无论何时cd对项目的任何子文件夹执行此命令.然后抛出

-bash: venv/bin/activate: No such file or directory
Run Code Online (Sandbox Code Playgroud)

它失败了,因为它试图activate相对于子文件夹执行.为什么它甚至在子文件夹中执行?如何解决这个问题?

python virtualenv

8
推荐指数
1
解决办法
1348
查看次数

sh相当于__FILE__

是否有一个等价的__FILE__,给我当前正在执行的文件的路径名?POSIX解决方案首选,bash可以接受,谢谢.

php shell file

7
推荐指数
1
解决办法
2015
查看次数

检索脚本的父目录

我正在使用卸载程序脚本删除安装脚本的父文件夹.

/usr/local/Myapplication/Uninstaller/uninstall.sh
Run Code Online (Sandbox Code Playgroud)

所以uninstall.sh必须这样做:

rm- rf /usr/local/Myapplication
Run Code Online (Sandbox Code Playgroud)

我可以检索卸载所在的文件夹

SYMLINKS=$(readlink -f "$0")
UNINSTALL_PATH=$(dirname "$SYMLINKS")
Run Code Online (Sandbox Code Playgroud)

但我仍然不确定获得父路径的漂亮方式.我想过使用sed去除这条路径的"Uninstaller"部分,但是有一种优雅的方法来获取Myapplication文件夹的路径来删除它吗?

谢谢

unix bash shell

7
推荐指数
3
解决办法
1万
查看次数

无法从PHP执行Bash脚本

我正在尝试执行一个简单Bash ScriptPHP脚本.我从HTML5前端页面收集数据,传递ajax给PHP脚本,获取变量,然后将这些变量传递给.sh脚本,但我有以下消息:

./test_bash.sh: line 13: ./test.txt: Permission denied
Run Code Online (Sandbox Code Playgroud)

我试图更改权限chmod 777 test_bash.sh,试图修改sudoers.d文件,试过这个:shell_exec("echo password_for_the_user | sudo -S command_to_execute");...但是Bash script无法写入test.txt文件.

这是我的基本代码,首先是PHP code:

<?php 
$var1 = json_decode($_POST['var1']); //from front-end html5
$var2 = json_decode($_POST['var2']);
$var3 = json_decode($_POST['var3']);

$response = shell_exec("./test_bash.sh $var1 $var2 $var3 2>&1");

echo "$response";
?>
Run Code Online (Sandbox Code Playgroud)

其次,Bash代码:

#!/bin/bash

var1=$1;
var2=$2;
var3=$3;

echo "$var1";
echo "$var2";
echo "$var3";

echo $var1 $var2 …
Run Code Online (Sandbox Code Playgroud)

php ajax bash html5 sudo

7
推荐指数
1
解决办法
283
查看次数

获取shell脚本目录的父目录

我这里有一个shell脚本:

/node_modules/.bin/exec.sh
Run Code Online (Sandbox Code Playgroud)

在exec.sh脚本中,我想获取包含脚本的目录的父目录的路径(不是pwd/cwd!).我可以像这样获取包含目录:

`dirname $0`
Run Code Online (Sandbox Code Playgroud)

这将产生:

/node_modules/.bin
Run Code Online (Sandbox Code Playgroud)

但我希望在一个目录更高,我只想得到

/node_modules
Run Code Online (Sandbox Code Playgroud)

我无法找到答案,我的猜测是:

`dirname $1`
Run Code Online (Sandbox Code Playgroud)

但只是一个猜测,不确定这是否正确.任何人都可以解释如何做到这一点以及它是如何工作的?

bash shell

7
推荐指数
2
解决办法
7220
查看次数

我的bash脚本中嵌套的`source`命令?

我有以下设置

??? modules
    ??? main.sh
    ??? major.sh
    ??? sub-modules
    ?   ??? minor.sh
Run Code Online (Sandbox Code Playgroud)
  • 我已经添加了/modules$ PATH的路径.

all.sh:

source major.sh
Run Code Online (Sandbox Code Playgroud)

major.sh:

source sub-module/minor.sh
Run Code Online (Sandbox Code Playgroud)

但是,当我运行这个时,我得到:

-bash: /sub-module/minor.sh: No such file or directory
Run Code Online (Sandbox Code Playgroud)

bash

6
推荐指数
1
解决办法
1484
查看次数