다음과 같은 파일을 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
.
food
3) 프로그램 실행 후 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
:
touch
생성 위치의 전체 디렉터리 경로로 호출됩니다.food.txt
- 디렉터리 경로를 변수로 저장하고 이를 결합합니다.
touch
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