Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.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
在bash脚本上交换目录中的两个文件_Bash_Shell - Fatal编程技术网

在bash脚本上交换目录中的两个文件

在bash脚本上交换目录中的两个文件,bash,shell,Bash,Shell,我正在编写一个脚本,读取目录中的两个文件,显示内容,交换文件,然后再次显示内容 我研究了如何交换两个文件,并得出了交换方法。但是,当我运行脚本时,该方法给了我一个错误 #!/bin/sh file1="$1" file2="$2" function readFile() { for file in `ls` do cat $file done } function swap() { echo "Swapping" TMP=$(mktemp -d) mv "$1" $TMP/tempf

我正在编写一个脚本,读取目录中的两个文件,显示内容,交换文件,然后再次显示内容

我研究了如何交换两个文件,并得出了交换方法。但是,当我运行脚本时,该方法给了我一个错误

#!/bin/sh
file1="$1"
file2="$2"

function readFile() {
for file in `ls`
do
  cat $file
done

}
function swap()
{
echo "Swapping"
TMP=$(mktemp -d)

 mv "$1" $TMP/tempfile
 mv "$2" "$file1"
 mv $TMP/tempfile "$file2"
 [ -e $TMP/tempfile ] && echo "Error!" || rm -r $TMP
 }
 cd ~
 cd test

 readFile $file1 $file2
 swap $file1 $file2
 readFile $file1 $file2
我收到一个错误mv:cannot stat:没有这样的文件或目录 mv:无法统计:没有这样的文件或目录 mv:无法统计“/tmp/tmp.jduY2Yk6xi/tempfile”:没有这样的文件或目录
如何实现交换?此外,对代码的任何改进都将不胜感激。

根据您的问题,我不确定这是否符合您的所有标准。但是,如果您只需要交换两个文件的内容,您可以使用这个非常简单的脚本

它将接受您要交换的2个文件。阅读每一篇文章的内容。将第一个文件另存为tmp。然后用file2的内容覆盖file1。然后,用tmp文件1的内容覆盖文件2。最后,它将再次阅读内容

#!/bin/sh
file1="$1"
file2="$2"

cat  $file1 $file2
mv $file1 tmp
mv $file2 $file1
mv tmp $file2
cat  $file1 $file2
运行这个

script.sh file1.txt file2.txt
结果

World 
hello
hello
World

如果另一个用户或窗口正在执行相同的操作,则在/tmp/文件夹中移动固定名称文件会有风险。最好还是浏览当前文件夹,因为它可能在同一台设备上,也可以使用mktmp生成一个唯一的名称。非常感谢。你的答案确实有效。但是,我无法修改代码,以便它可以获取目录中文件的名称并对其执行交换操作。例如,在我的测试目录中,我有两个文件,hello.txt和welcome.txt。如何在不直接输入名称的情况下实现交换?在如何将名称指定为变量方面,我肯定缺少一些内容。如果名称为常量,则可以使用/path/to/file替换$1和$2。如果尝试动态读取它们,则必须编写搜索它们的循环