마치 다른 폴더에서 호출된 것처럼 실행 파일을 호출하려면 어떻게 해야 합니까?

마치 다른 폴더에서 호출된 것처럼 실행 파일을 호출하려면 어떻게 해야 합니까?

다음과 같은 파일을 food생성하는 프로그램이 있다고 가정해 보겠습니다 ./bin/dinner.txt

#!/bin/bash
touch dinner.txt

food내 프로그램을 사용하여 먼저 호출하지 않고 내 폴더에 생성하고 싶습니다 . 즉, 마치 불린 것처럼 부르고 싶다. 어떻게 해야 합니까?dinner.txt/home/cd /home/food/home/

편집하다:실제 프로그램을 편집할 수 없다고 가정해 보겠습니다 food.

답변1

(cd ~ && /bin/food)

이것은 서브 쉘에서 시작됩니다.

답변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. Run은 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

그런 다음 동일한 셸의 어느 곳에서나 위 스크립트를 호출할 수 있습니다.

$ $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

마지막으로, 요청하지 않아도 Argument 명령을 로 변경하여 생성할 파일 이름을 인수로 전달할 수 있습니다 touch $1/$2. 예를 들어:

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

관련 정보