如何像从另一个文件夹调用一样调用可执行文件?

如何像从另一个文件夹调用一样调用可执行文件?

假设我有一个程序food可以创建如下/bin/文件:dinner.txt

#!/bin/bash
touch dinner.txt

我想使用我的程序在我的文件夹中food创建而不先调用。换句话说,我想像从 调用它一样进行调用。我该怎么做?dinner.txt/home/cd /home/food/home/

编辑:假设我无法编辑实际的food程序。

答案1

(cd ~ && /bin/food)

这会在子 shell 中启动它。

答案2

答案是也许。我能想到三种可能性。

1) 食品程序有一个允许指定输出文件的选项。约定通常(但并非总是)是一种-o outputfile选择。运行man food或尝试/bin/food -h可能会显示可用的选项。

2) 食品计划有一个写入选项SDTOUT。如果是这样的话,那么你可以运行/bin/food <whatever option writes to STDOUT> > /home/dinner.txt

food3)程序运行后移动dinner.txt 文件。例如food; mv dinner.txt /home

了解您为什么不想跑步会很有帮助cd。运行cd /home; food; cd -将运行程序home并将目录更改回food命令运行之前的目录。

答案3

你不能编辑food程序,但你可以编写一个新eats程序吗?

#!/bin/bash
cd "${@}"
food

你可以吗

sudo mv /bin/food /bin/oldfood
sudo mv /bin/eats /bin/food

并更改 /bin/food 来调用 oldfood

答案4

编辑:

假设您无法更改程序的代码,您可以编写一个简短的包装脚本,它将export food.sh作为全局变量,然后执行它。

而且,如果您想从此脚本中完全删除目录依赖性,您还可以导出包装器脚本。这将允许您从此会话中的任何路径运行脚本shell,并始终在下面获取输出文件/home/

包装脚本wrapper_food.sh

#!/bin/bash
export mkfood="/home/shadowme/mkfood.sh"
cd /home/shadowe/testdir/
$mkfood

输出:

$ ls testdir
food.0.txt

导出包装脚本:

$ export wrapper_food=/home/shadowe/wrapperfood.sh

然后您可以从同一 shell 中的任何位置调用上面的脚本:

$ $wrapper_food

原答案:

一般来说,cd /home/之前我会想到三种避免的方法touch

  1. touch使用创建位置的完整目录路径进行调用food.txt
  2. 将目录路径存储为变量,然后将其组合在touch
  3. sh调用脚本时将目录路径作为参数传递。

人们可以根据用例选择上述每一项。例如,如果我想始终在同一目录中创建文件,我将不会使用参数选项,因为它的输入较长。相反,我会将路径存储为变量。

下面的脚本按照提到的顺序提供了上述各项的示例。

输入:

$ ./mkfood.sh /home/shadowe/testdir

输出:

$ ls /home/shadowe/testdir
food1.txt  food2.txt  food.txt

脚本:

#!/bin/bash

# store path as variable
dir_path="/home/shadowe/testdir"
touch $dir_path/food.txt

#direct path
touch /home/shadowe/testdir/food1.txt

# argument pass
touch $1/food2.txt

最后,即使没有询问,也可以通过将参数命令更改为 来传递要创建的文件名作为参数touch $1/$2。例如:

$ ./mkfood.sh /home/shadowe/testdir food2.txt

相关内容