我ssh在我的应用程序中使用命令运行 shell 脚本。使用的私钥是通过密码加密的,问题是 - 当被问到时我无法交互地传递它。密钥没有添加到ssh-agent. 我无法执行,ssh-add my_key因为密码应该以交互方式传递。对终端通信有好处,但在应用内部使用不太好。
该man page说:
显示和 SSH_ASKPASS
如果 ssh-add 需要密码短语,如果它是从终端运行的,它将从当前终端读取密码短语。如果 ssh-add 没有与之关联的终端,但设置了 DISPLAY 和 SSH_ASKPASS,它将执行 SSH_ASKPASS 指定的程序并打开 X11 窗口以读取密码。这在从 .xsession 或相关脚本调用 ssh-add 时特别有用。(请注意,在某些机器上,可能需要重定向来自 /dev/null 的输入才能使其工作。)
当我执行时,SSH_ASKPASS=file_with_passphrase ssh-add my_key我仍然要求输入密码,在这种情况下,看起来 env var 只是被忽略了。我尝试执行ssh -o BatchMode=yes并且服务器拒绝了编码的密钥,因为没有人能够对其进行解码。
我绝对可以在使用之前手动解码 ssh 密钥,ssh-agent但看起来我即将从SSH_ASKPASS变量中获得我需要的东西,但我不知道如何使它工作。很高兴得到社区帮助。
在下面的课程
class Foo {
let _defaultValue = "N/A"
let value: String
init (dict: NSDictionary) {
self.value = dict["bar"] as? String! ?? _defaultValue
}
}
Run Code Online (Sandbox Code Playgroud)
编译因消息而失败
constant 'self.value' captured by a closure before being initialized
据我所知,没有操作员阅读_defaultValue,这个消息真的令人困惑.
我随机发明的变通方法让我更加困惑:
class Foo {
let value: String
init (dict: NSDictionary) {
let _defaultValue = "N/A"
self.value = dict["bar"] as? String! ?? _defaultValue
}
}
Run Code Online (Sandbox Code Playgroud)
决策constant 'self.value' captured by a closure before being initialized声明和初始化内部构造关闭编译器抱怨和编程工作!
怎么解释这样的事情?
我有
class CustomObject {
Integer day;
List<InnerObject> innerObjects;
///getter setter
}
class InnerObject {
String id;
List<String> someVal;
//getter setter
}
Run Code Online (Sandbox Code Playgroud)
我有一个
List<CustomObject>
而且我要
Table<String, Integer, List<String>>
我希望表代表id (from InnerObject)- >(day (from Custom object),List of someVal (from InnerObject)
为了使它干净我调整了一点名称,但结构与预期相同.
现在我的表现如何
final List<CustomObject> objects = ???
final Map<Integer, List<InnerObject>> dayVsInnerObjects = objects.stream()
.collect(toMap(CustomObject::getDay, CustomObject::getInnerObjects));
final Table<String, Integer, List<String>> table = HashBasedTable.create();
dayVsInnerObjects.forEach((day, innerObjects) ->
innerObjects.forEach(i -> {
table.put(i.getId(), day, i.getSomeVal());
})
);
Run Code Online (Sandbox Code Playgroud)
我的问题:
我有一个unzipDatagradle任务定义如下:
task unzipFile(type: Copy) {
dependsOn mkdirTrash
dependsOn downloadFile
from zipTree(file("$trashDir/file.zip"))
into trashDir
}
Run Code Online (Sandbox Code Playgroud)
该任务将存档内容直接与存档本身一起解压缩到目录中(在trash目录中,该目录是所有任务工件的根,并且只有在完成所有准备任务后才能删除)。
在我将gradle包装器更新为4.2.1版本之前,一切一直可以正常工作。
任务执行开始产生错误:
FAILURE: Build failed with an exception.
* What went wrong:
Cannot expand ZIP 'trash/file.zip' as it does not exist.
Run Code Online (Sandbox Code Playgroud)
在调试输出中,我看到gradle删除了整个trash目录
> Task :unzipFile
11:56:23.145 [DEBUG] [org.gradle.internal.progress.DefaultBuildOperationExecutor] Build operation 'Task :unzipFile' started
11:56:23.145 [DEBUG] [org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter] Starting to execute task ':unzipFile'
11:56:23.145 [INFO] [org.gradle.api.internal.tasks.execution.ResolveTaskArtifactStateTaskExecuter] Putting task artifact state for task ':unzipFile' into context took 0.0 secs.
11:56:23.204 [DEBUG] [org.gradle.internal.progress.DefaultBuildOperationExecutor] …Run Code Online (Sandbox Code Playgroud) 我正在使用以下方法创建随机数列表
val randomList = List(4) { Random.nextInt(0, 100) }
Run Code Online (Sandbox Code Playgroud)
但是,这种方法行不通,因为我想避免重复
我认为CASE 2也应该归结为真.这种行为是否正确?
// CASE 1
Int::class.javaPrimitiveType!!.kotlin == Int::class.javaObjectType.kotlin // true
// CASE 2
Int::class.javaPrimitiveType!!.kotlin === Int::class.javaObjectType.kotlin // false
Run Code Online (Sandbox Code Playgroud)