如何获得与bash脚本无关的路径,而不论它是从bash还是另一个脚本中获取?

时间:2018-08-31 10:47:45

标签: bash

我有一个脚本,用于配置一些环境变量。因此它需要自己的位置,即$ 0的值。

我有另一个脚本可以获取第一个脚本,但是也有可能第一个脚本是从控制台获取的。

但是,import javax.crypto.Cipher; import javax.crypto.SecretKey; import javax.crypto.SecretKeyFactory; import javax.crypto.spec.PBEKeySpec; import javax.crypto.spec.PBEParameterSpec; public static byte[] encrypt(final byte[] data, final char[] password, final byte[] salt, final int noIterations) { try { final String method = "PBEWITHHMACSHA512ANDAES_256"; final SecretKeyFactory kf = SecretKeyFactory.getInstance(method); final PBEKeySpec keySpec = new PBEKeySpec(password); final SecretKey key = kf.generateSecret(keySpec); final Cipher ciph = Cipher.getInstance(method); final PBEParameterSpec params = new PBEParameterSpec(salt, noIterations); return ciph.doFinal(data); } catch (final Exception e) { // best not to let the encryption error bubble out throw new RuntimeException("Spurious encryption error"); } } $0在MacOS上似乎都无法正常工作。这是一个小例子,说明我的意思:

a.sh:

${BASH_SOURCE[0]}

b.sh:

#!/bin/bash -eu
source ./b.sh

#!/bin/bash -eu echo "$0" echo "${BASH_SOURCE[0]}" 的输出:

./a.sh

./a.sh ./b.sh 的输出:

source ./b.sh

不相关,只是为了完整性:./b.sh <empty line, can't get stackoverflow to display it properly> 的输出:

./b.sh

因此,简而言之:如果我使用./b.sh ./b.sh 来获取脚本名称,那么通过另一个脚本来获取源代码是错误的。如果我使用$0,则直接来源时将为空。

在两种情况下如何获取脚本名称?

1 个答案:

答案 0 :(得分:0)

我刚刚发现${BASH_SOURCE[0]}在两种情况下都解析为正确的脚本名称。