我正在构建一个尝试在服务器上运行某些命令的脚本(通过SSH),并在屏幕上写入它们是否成功.
我注意到一个奇怪的行为$?,即不是0在前一个命令失败时.
最初,我有:
ssh <user>@<server> <<EOF
false
if [ $? -ne 0 ]; then
echo "It failed"
else
echo "It worked"
fi
EOF
Run Code Online (Sandbox Code Playgroud)
如果我复制并粘贴里面的脚本<<EOF和EOF,它打印It failed.如果我用ssh零件运行它,它会打印出来It worked.为了简化,我尝试了:
ssh <user>@<server> <<EOF
false
echo $?
EOF
Run Code Online (Sandbox Code Playgroud)
同样的事发生了.如果我复制粘贴或在里面输入命令,它会打印1,但是如果我运行它(包括ssh),它就会打印出来0.
如果我以这种方式直接使用bash,则会发生同样的错误
bash <<EOF
false
echo $?
EOF
Run Code Online (Sandbox Code Playgroud)
要么
bash -c "false; echo $?"
Run Code Online (Sandbox Code Playgroud)
为什么会这样?如何在此上下文中检查上一个命令是否失败?
我有以下Java 8 Swing代码:
JButton button = new JButton("Browse");
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JFileChooser fileChooser = new JFileChooser();
fileChooser.setDialogTitle("Choose file as input");
fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
FileNameExtensionFilter filter = new FileNameExtensionFilter("Excel Filter", "xls", "xlsx");
fileChooser.setFileFilter(filter);
if (fileChooser.showOpenDialog(mainWindow) == JFileChooser.APPROVE_OPTION) {
File selection = fileChooser.getSelectedFile();
createFile(selection);
}
}
});
Run Code Online (Sandbox Code Playgroud)
这个想法是,用户选择一个目录,然后键入应用程序将随后创建的新文件的名称。但是,当我单击按钮时,这就是我看到的:
请注意,在没有“ File Name ”文本字段的地方可以输入新文件名吗?我需要更改哪些配置才能获得此功能?
这是去年考试中提出的一个问题.
考虑以下C代码片段:
int i, array[1000000];
array[0] = 0;
for (i = 1; i < 1000000; i++)
array[i] = array[i-1] + 3;
Run Code Online (Sandbox Code Playgroud)
我们可以简单地并行运行for循环中的1,000,000个数组更新语句吗?如果没有,请更改update语句,使其可以并行运行并仍然生成相同的最终数据内容.
据我所知,不可能在for循环中并行运行1,000,000个数组更新语句.我想到的唯一方法就是使用不是平行的递归,并使用1000000个线程,这不是一个好主意.
那么是否有另一种方法可以与非常少的更新语句并行完成此操作?我们可以使用openMPI或openCL
编辑:这不是一个家庭作业问题,但我认为它是作为一些学校的家庭作业.这是过去的试卷.我在这里上传了它
将arraylist分配给另一个并在两个arraylists之间使用方法addAll有什么区别?
1> arrayList = arrayList;//应该将后面的arrayList的值赋给第一个.
2> arrayList.addAll(arrayList)//将后面列表的所有数据添加到第一个.
第一个完全替换列表中的数据?第二个用于在列表中附加数据(如果已经有任何数据)???
如果我执行arrayList.add(arrayList)而不将任何数据分配给第一个列表,它会插入任何数据吗?
我做了以下代码测试,发现了我真的不知道的结果.
secondList.add("1");
secondList.add("2");
firstList = secondList;
Log.i("CHECK","first list = "+ firstList);
firstList.addAll(secondList);
Log.i("CHECK","Firs list add : "+firstList);
firstList.clear();
firstList.addAll(secondList);
Log.i("CHECK","Firs list add 2 : "+firstList);
Run Code Online (Sandbox Code Playgroud)
结果是:
CHECK: first list = [1, 2]
CHECK: Firs list add : [1, 2, 1, 2]
CHECK: Firs list add 2 : []
Run Code Online (Sandbox Code Playgroud)
我期待最后一个日志有如下结果: [1,2]
正如docs.oracle.com中提到的那样
addAll-将指定集合中的所有元素按指定集合的迭代器返回的顺序附加到此列表的末尾.
如果列表中没有数据?什么会添加所有DO?
我从某种意义上理解了O(logn),它可以快速增加,但是输入较大时,增加的速度会延迟。我无法完全理解
O(登录)
复杂度为nlogn的算法与复杂度为n + logn的算法之间的差异。
我可以使用电话簿示例的修改和/或一些基本的python代码来理解这两个查询
使用 c++11。既然std::notify_all会导致虚假唤醒,那么为什么std::notify_all会保留而不是std::notify_one一直存在呢?std::notify_one 顺便说一句,可能会导致虚假唤醒吗?
阐述一下我的疑惑:
当我调用std::condition_variable.wait/wait_for/wait_untiland时std::notify_XXX,我的目的通常是实现线程同步。也就是说,更多的线程阻塞等待,直到另一个线程通知只有其中一个线程解除阻塞。
那么我就可以调用notify_one来实现这一点,但是为什么还有另一个notify_all,它的目的是什么,或者notify_all适合什么情况?在我的情况下,当我调用 时notify_all,它会唤醒所有等待线程,然后只有一个线程真正解除阻塞,而其他线程仍然阻塞,这是否称为虚假唤醒?如果notify_one也会调用虚假唤醒?
我想知道声明一个函数是否有任何好处const.
我知道这意味着该方法无法修改任何非静态类成员,但这样做的唯一目的是防止某人将该功能重新实现为修改非静态成员的东西,还是存在性能差异?如果存在性能差异,编译器通常可能比人类做得更好,例如inline功能吗?
只是为了澄清,我问的是以下成员函数之间的区别:
float getWidth() const
{
return width;
}
float getWidth()
{
return width;
}
Run Code Online (Sandbox Code Playgroud) 我想写一个用户输入的程序,只要输入不是0就会继续要求输入.
我是怎么做到的:我决定检查第一个输入是否为0,如果为0则程序将立即退出.如果第一个输入不是0,那么它将要求用户输入更多数字.
我的问题:它只询问我2次,然后执行程序结束语句.
我的守则
import java.util.Scanner;
public class MyArList {
private static final int num2 = 0;
public static void main (String[] args){
Scanner userInput = new Scanner(System.in);
System.out.print("Enter 1st number: ");
int num1 = userInput.nextInt();
if (num1==0){
System.out.println("program exits");
}
else
{System.out.print("Enter more numbers: ");
while(!(userInput.nextInt()==0))
System.out.print("Progam ends ");
}
}
}
Run Code Online (Sandbox Code Playgroud)
我也想过/尝试过,但那也不起作用
if( num1==0){
System.out.println("Program exits");
}
else{
do{
System.out.print("Enter more numbers: ");
int num2 = userInput2.nextInt();
}while(!(num2==0));
Run Code Online (Sandbox Code Playgroud)
感谢您宝贵的时间和意见.
我正在尝试ls用 C编写命令,但stat()拒绝打开任何其他目录。
~/Desktop/ls$ cat bug.c
#include <sys/types.h>
#include <sys/stat.h>
#include <dirent.h>
#include <stdlib.h>
#include <stdio.h>
#include <pwd.h>
#include <grp.h>
#include <time.h>
#include <unistd.h>
int main(int ac, char **av)
{
DIR *d;
struct dirent *dir;
struct stat file;
d = opendir(av[1]);
if (d)
{
while ((dir = readdir(d)) != NULL)
{
printf("%s ->", dir->d_name);
if (lstat(dir->d_name, &file) < 0)
printf(" can't read file %s!", dir->d_name);
printf("\n");
}
}
closedir(d);
return (0);
}
Run Code Online (Sandbox Code Playgroud)
运行时./a.out。或任何子文件夹,它工作正常。但是如果我写./a.out .. …
举个例子:
int main()
{
const char* what = "Is This";
what = "Interesting";
cout << *what;
what[3] = 'a'; // Sytax Error: expression must be a modifiable lvalue
cout << *what;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
因此,我声明what为const char*,并能够为其重新分配另一个值(内存中的实际数据-而不是内存地址本身)。
但是,这告诉我,我不能更改第4位的角色!
这是为什么?